leetcode--LargestRectangleinHistogram
来源:互联网 发布:c语言mod 编辑:程序博客网 时间:2024/04/29 21:22
思路:
首先考虑这样一种情况,之前所有的柱都是递增的,最后一个柱子小于之前所有的柱子。
此时求每个柱子对应的最大面积只需要计算与左边相邻柱子的距离以及与最后柱子的距离乘以当前柱子高度,时间复杂度为O(n)。
如何把一般的情况转化成这种特殊的情况呢?
可以遍历柱子,用栈存放递增的柱子下标,一旦遇到小于栈顶的柱子把栈内大于当前柱高的下标全部出栈并计算面积。然后将当前下标入栈。
这样可以保证栈内的柱高都是递增的,出栈时计算面积的情况就转化成了之前的特殊情况。时间复杂度为O(2n)。
public int largestRectangleArea(int[] height) { Stack<Integer>stack=new Stack(); int max=0; for(int i=0;i<height.length;i++){ while(!stack.empty()&&height[i]<height[stack.peek()]){ int tmp=stack.pop(); int leftArea=(stack.empty()?tmp+1:tmp-stack.peek())*height[tmp]; int rightArea=(i-tmp-1)*height[tmp]; int area=leftArea+rightArea; max=(max<area)?area:max; } stack.push(i); } while(!stack.empty()){ int tmp=stack.pop(); int leftArea=(stack.empty()?tmp+1:tmp-stack.peek())*height[tmp]; int rightArea=(height.length-tmp-1)*height[tmp]; int area=leftArea+rightArea; max=(max<area)?area:max; } return max; }
0 0
- leetcode--LargestRectangleinHistogram
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- 51NOD 1459 迷宫游戏
- AltiumDesigner99——常用快捷键
- SQLite 创建表
- 法线贴图原理,切线空间的概念理解
- Android内容提供者(Content provider)
- leetcode--LargestRectangleinHistogram
- Android studio: No debuggable Application
- html5之本地存储
- Android : View.getWidth() 和 view.getHeight() 返回0
- HDU 1157 Who's in the Middle (快速排序)
- Android错误之--Error retrieving parent for item: No resource found that matches the given name 'Theme.A
- [C++]Single Number III单个数字3
- HDU 5088 Revenge of Nim II (高斯消元??)
- retain(strong)和copy之间的关系