【Leetcode】Largest Rectangle in Histogram
2014-03-19 21:27
344 查看
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.
View Code
O(n2)的算法还是很好想的,但是如果借用数据结构--栈,可以使复杂度降低。
从左向右扫描数组,如果bar递增,则入栈,遇到第一个下降的bar时,开始出栈,计算从该bar(不含)到栈顶元素(含)之间形成的矩形面积,直到遇到栈里第一个低于它的bar,此时可以继续向前扫描下一个元素。
栈里维护的是递增序列。
class Solution { public: int largestRectangleArea(vector<int> &height) { int max_area = 0; stack<int> s; height.push_back(0); int i = 0; while (i < height.size()) { if (s.empty() || height[s.top()] < height[i]) { s.push(i++); } else { int t = s.top(); s.pop(); max_area = max(max_area, height[t] * (s.empty() ? i : i - s.top() - 1)); } } return max_area; } };
View Code
O(n2)的算法还是很好想的,但是如果借用数据结构--栈,可以使复杂度降低。
从左向右扫描数组,如果bar递增,则入栈,遇到第一个下降的bar时,开始出栈,计算从该bar(不含)到栈顶元素(含)之间形成的矩形面积,直到遇到栈里第一个低于它的bar,此时可以继续向前扫描下一个元素。
栈里维护的是递增序列。
相关文章推荐
- 身是贫民不知贫?!
- 南阳 49 开心的小明
- Java启动新线程的额外开销
- hive 命令
- Vim+Vundle+YouCompleteMe
- 边缘检测 (4)Prewitt边缘算子
- Net中unsafe编程详解
- 边缘检测 (4)Prewitt边缘算子
- java--继承
- 协同过滤详解及实现(转载)
- poj2253 Frogger
- (31)格式化一个数字的方法
- C语言脉络图
- github
- Python 实现 Trie
- 多线程的懒汉式
- python,praat
- Use Python to run REST API Automation Test
- [Debug]Native Exception学习(一)
- [python]python学习笔记(四)