美文网首页
[LeetCode] Largest Rectangle in

[LeetCode] Largest Rectangle in

作者: 泡泡酱的博客 | 来源:发表于2019-06-15 11:14 被阅读0次

    题目描述:

    Given *n* non-negative integers representing the histogram's bar height 
    where the width of each bar is 1, find the area of largest rectangle in the
     histogram.
    
    Above is a histogram where width of each bar is 1, given height = `[2,1,5,6,2,3]`. The largest rectangle is shown in the shaded area, which has area = `10` unit
    Example:
    input: [2,1,5,6,2,3]
    Output: 10
    

    解题思路:
    本题要求我们求出直方图中最大的矩形面积。仔细观察分析可以知道,关键是找到直方图中最大矩形的长和高。

    那么如何得到直方图中最大矩形呢?一个想法是对于直方图中的每一个局部峰值,都向前遍历,算出其最大的公共矩形。

    而为了寻找直方图中的局部峰值,我们可以借由stack来实现:即将直方图的高度依次入栈,只要当前高度小于栈顶,则栈顶为一个局部峰值。

    解法如下:

    int largestRectangleArea(vector<int>& heights) {
            stack<int> s;
            //insert 0 in origial stack
            s.push(0);
            
            int res = 0;
            
            for(int i = 0; i < heights.size();){
                //if current height larger than s.top, 
                //push into stack
                if(s.empty()||heights[i]>=heights[s.top()]){
                    s.push(i);
                    i++;
                }
                else{
                    //else, find the current largest rectangle
                    int h = heights[s.top()];
                    s.pop();
                    
                    int w = (!s.empty())?i-s.top()-1:i;
                    
                    res = max(res,h*w);
                }
            }
            return res;
        }
    

    相关文章

      网友评论

          本文标题:[LeetCode] Largest Rectangle in

          本文链接:https://www.haomeiwen.com/subject/vdovfctx.html