关闭

LeetCode之Largest Rectangle in Histogram

标签: Leetcode
268人阅读 评论(0) 收藏 举报
分类:
/*用栈维持一个不递减的数组的下标。用以获取某个连续段的最大矩形。
参考自: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;
	}
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47261次
    • 积分:1801
    • 等级:
    • 排名:千里之外
    • 原创:125篇
    • 转载:68篇
    • 译文:1篇
    • 评论:0条