您的位置:首页 > 其它

Largest Rectangle in Histogram 一排矩形中的最大的面积

2015-09-23 15:44 453 查看


Largest Rectangle in Histogram

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.

For example,

Given height =
[2,1,5,6,2,3]
,

return
10
.
class Solution {
public:
//http://www.cnblogs.com/lichen782/p/leetcode_Largest_Rectangle_in_Histogram.html 
//思想很棒,栈内元素一定是要比当前i指向的元素小
//弹栈过程中面积的计算:h[t] * (stack.isEmpty() ? i : i - 1 - stack.peek() )
//1.h[t]是刚刚弹出的栈顶端元素,它肯定是短板,此时的面积计算是h[t]和前面的i-1开始所能围成的最大面积。
//2.栈内索引指向的元素都是比h[t]小的,如果h[t]是目前最小的,那么栈内就是空哦,则计算所有的。
//3.目前栈顶元素和h[t]之间(不包括h[t]和栈顶元素),都是大于他们两者的
//栈存储的是下标,末尾添加一个0,使元素都出栈
    int largestRectangleArea(vector<int>& height) {
        stack<int> ss;
        int i=0,maxArea=0;
        height.push_back(0);
        int len=height.size();

        while(i<len){
           if(ss.empty() || height[ss.top()]<=height[i]){
               ss.push(i++);
           }else{
                int t=ss.top();
                ss.pop();
                maxArea=max(maxArea,height[t] * (ss.empty()?i : i-1-ss.top()));
           }
       }
       return maxArea;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: