/*用栈维持一个不递减的数组的下标。用以获取某个连续段的最大矩形。
参考自:https://github.com/soulmachine/leetcode*/
class Solution {
public:
int largestRectangleArea(vector<int>& height) {
if(height.empty()) return 0;
height.push_back(0);
stack<int> s;
int res(0), i(0);
while(i < height.size()){
if(s.empty() || height[i] >= height[s.top()]) s.push(i);//入栈
else{//出栈
int h = height[s.top()];
while(!s.empty() && height[i] < height[s.top()]){//出栈
if(height[s.top()] < h) h = height[s.top()];
int tmp = s.top();
s.pop();
res = max(res, (s.empty() ? i : i - s.top()-1)*h);
}
s.push(i);
}
++i;
}
return res;
}
};
LeetCode之Largest Rectangle in Histogram
最新推荐文章于 2020-01-24 06:34:07 发布