leetcode84: Largest Rectangle in Histogram
来源:互联网 发布:全国vb二级考试题库 编辑:程序博客网 时间:2024/05/17 21:44
84. Largest Rectangle in Histogram
height的内容是 [5,6,7,8,3],特点是除了最后一个,前面全部保持递增,且最后一个立柱的高度小于前面所有立柱高度。
对于这种特点的柱状图,如果使用上面所说的“挨个使用每一个柱状图的高度作为矩形的高度,求面积”的方法,还需要用嵌套循环吗?
我们知道除了最后一个,从第一个到倒数第二个立柱的高度都在升高,那么如果挨个使用每一个柱的高度作为矩形的高度,那么依次能得到的矩形的宽度就可以直接算出来:使用5作为高度可以使用前四个立柱组成 4*5的矩形,高度6可以组成3*6的矩形… 因此只需要遍历一次,选出最大面积即可。
对于这种类型的柱状图,最大矩形面积的时间复杂度是O(n)。
我们将这种特点的柱状图称为“波峰图”。
python
class Solution(object): def largestRectangleArea(self,heights): Stack_Numbers=[] Stack_Index=[] maxS=0 for i in range(len(heights)): if not len(Stack_Numbers): if heights[i]: Stack_Numbers.append(heights[i]) Stack_Index.append(i) else: if heights[i]>=Stack_Numbers[-1]: Stack_Numbers.append(heights[i]) Stack_Index.append(i) else: if heights[i]: for k in range(len(Stack_Numbers)): if Stack_Numbers[k]>heights[i]: temp=Stack_Index[k] for h in range(len(Stack_Numbers)-k): maxS=max(maxS,(i-Stack_Index[k+h])*Stack_Numbers[k+h]) break for h in range(len(Stack_Numbers)-k): Stack_Numbers.pop() Stack_Index.pop() if heights[i]: Stack_Numbers.append(heights[i]) Stack_Index.append(temp) else: for k in range(len(Stack_Numbers)): maxS=max(maxS,(i-Stack_Index[k])*Stack_Numbers[k]) for k in range(len(Stack_Numbers)): Stack_Numbers.pop() Stack_Index.pop() if len(Stack_Numbers): for k in range(len(Stack_Numbers)): maxS=max(maxS,(len(heights)-Stack_Index[k])*Stack_Numbers[k]) return maxSCC=Solution()s=[3,6,5,7,4,8,1,0]print CC.largestRectangleArea(s)
C++
class Solution {public: int largestRectangleArea(vector<int> &height) { if(height.size() == 0) return 0; stack<int> st; int MAX = 0; height.push_back(0); int leftarea = 0, rightarea = 0; for(int i = 0; i < height.size(); ++i){ while(!st.empty() && height[st.top()] > height[i]){ int tmp = st.top(); st.pop(); leftarea = (st.empty() ? tmp + 1 : tmp - st.top()) * height[tmp]; //以tmp为高度,tmp所在柱以及向左延伸出来的矩形面积 rightarea = (i - tmp - 1) * height[tmp]; //以tmp为高度,向右边延伸出来的矩形面积 if((leftarea + rightarea) > MAX) MAX = (leftarea + rightarea); } st.push(i); } return MAX; }};
0 0
- leetcode84: Largest Rectangle in Histogram
- LeetCode84. Largest Rectangle in Histogram
- LeetCode84. Largest Rectangle in Histogram
- LeetCode84 --Largest Rectangle in Histogram
- leetcode84. Largest Rectangle in Histogram
- Leetcode84. Largest Rectangle in Histogram
- Leetcode84. Largest Rectangle in Histogram.
- LeetCode84 Largest Rectangle in Histogram
- LeetCode84 Largest Rectangle in Histogram java题解
- LeetCode84——Largest Rectangle in Histogram
- 贪心2-- Largest Rectangle in Histogram(LeetCode84)
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- Largest Rectangle in Histogram
- hdoj 2097 Sky数
- 第一周-入门训练-序列求和
- Debug Assertion Failed! Expression: _pFirstBlock == pHead
- 对象新建属性对原型链的影响
- CSS中对图片(background)的一些设置心得总结
- leetcode84: Largest Rectangle in Histogram
- JavaMail实现QQ邮箱发送报错问题的处理
- ngrok映射端口到外网
- 今天算是开博的第一天,希望能记录我菜鸟的成长之路吧
- LINUX几个常用到的命令
- leetcode 20 Valid Parentheses
- SQL与NoSQL,谁更适合大数据?主流的关系型数据库?什么是JSON?
- 5.Foundaton Kit介绍 部分一
- HDU 5522 Numbers