码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 之Largest Rectangle in Histogram(40)

时间:2016-05-28 15:39:29      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

又是一道构思巧妙的题,暴力求解复杂度太高,通过构造一个递增栈,O(n)就能解决问题,其中的过程值得细细体会。

技术分享
int largestRect(vector<int> &height)
      {
          stack<int> s;//定义一个单调递增栈
          height.push_back(0);//定义单调递增栈的最后一个
          int result = 0;//记录当前最大的面积
          for (int i = 0; i < height.size();)//满足条件i才递增
          {
              if (s.empty() || height[i]>s.top())
              {
                  s.push(i++);//只有当前元素大于栈顶元素是才入栈相应的序号,构造递增栈
              }
              else {
                  //当前元素小于栈顶元素时
                  int tmp = s.top();//保留栈顶元素
                  s.pop();//弹出直至当前元素大于栈顶元素,使栈仍然是递增的
                  //
                  result = max(result, height[tmp]*(s.empty() ? i : i - s.top() - 1));
              }
          }

          return result;
      }
View Code

 

Leetcode 之Largest Rectangle in Histogram(40)

标签:

原文地址:http://www.cnblogs.com/573177885qq/p/5537334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!