LeetCode84. 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
For example,
Given heights = [2,1,5,6,2,3],
return 10.
思路
设置一个栈,栈中存储的是柱子的下标。如果当前柱子比前一个柱子要高,就把当前柱子的下标入栈;直到遇到比栈顶元素所在柱子要小的柱子,取出栈顶元素,然后计算当前矩形面积,然后再对比当前值和新的栈顶值大小,若还是栈顶值大,则再取出栈顶,算此时共同矩形区域面积,照此类推,可得最大矩形。
具体图解见某博主的详细分析,最好自己再画画图更容易理解。
代码实现
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int> index;
heights.push_back(0);
int res=0;
for(int i=0;i<heights.size();++i){
if( index.empty() || heights[i]>heights[index.top()]) index.push(i);
else{
int cur=index.top();
index.pop();
res=max(res,heights[cur]*(index.empty()?i:(i-index.top()-1)));
--i;//回退继续和栈顶所在柱子比较
}
}
return res;
}
};
ps: 这个代码真是非常简洁,但感觉思路真是很难想到,继续学习!