Largest Rectangle in Histogram--LeetCode

来源:互联网 发布:c语言开发系统 编辑:程序博客网 时间:2024/05/19 02:25

1.题目

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 heights = [2,1,5,6,2,3],
return 10.

2.题意

在直方图中找到最大矩形的区域

3.分析

借助栈保存递增序列,找出局部最大值
若当前值小于栈顶值时,取出栈顶元素,计算当前矩形面积
继续比较当前值和新的栈顶值,若还是栈顶值大,则再取出栈顶元素,计算新的矩形面积
依次类推,得到最大矩形

4.代码

class Solution {public:    int largestRectangleArea(vector<int>& heights) {        int res = 0;        stack<int> s;        heights.push_back(0);        for(int i = 0; i < heights.size(); ++i)        {            while(!s.empty() && heights[i] <= heights[s.top()])            {                int cur = s.top();                s.pop();                if(s.empty())                    res = max(res, heights[cur] * i);                else                    res = max(res, heights[cur] * (i - s.top() - 1));            }            s.push(i);        }        return res;    }};
原创粉丝点击