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

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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值