leetcode 84:Largest Rectangular Area in a Histogram
2016-10-20 20:45
288 查看
对于每个柱子,都有一个关于他的矩形,在这个矩形中,这个柱子是最矮的。
只有就算出所有柱子的矩形,再从其中找出最大值,任务就完成了。
如何计算柱子"x'作为最短柱子的矩形面积?
我们需要找出左边第一个比X小的柱子坐标,和右边第一个比X小的柱子坐标。
如何找出左边及右边第一个比X小的柱子呢?
我们需要建立一个堆栈,从左到右加入柱子,栈中存放的是柱子的下标,从左到右加入柱子,当加入的柱子i比栈顶的柱子小时,右边第一个比栈顶X小的柱子坐标已经找到,弹出栈顶柱子。
那么左边第一个比栈顶柱子小的下标是什么呢?
因为柱子是从左到右放入的,并且如果栈顶柱子之前的柱子比X大,那么栈顶柱子之前的柱子应该早就已经弹出。所有栈顶柱子之前的柱子肯定要比栈顶柱子要小。
所有这时候左边和右边第一个比栈顶柱子小的柱子都已经找到了。
如果当遍历到最右边,栈中还有元素没有弹出,说明改元素的右边,没有比他还小的元素。
class Solution{ public int largestRectangleArea(int[] heights) { Stack<Integer> st=new Stack<Integer>(); int i=0,maxarea=0,area; while(i<heights.length){ if(st.isEmpty()||heights[st.peek()]<=heights[i]){ st.push(i++); } else{ int tp=st.pop(); area=heights[tp]*(st.empty()?i:i-st.peek()-1); if(area>maxarea){ maxarea=area; } } } while(!st.isEmpty()){ int tp=st.pop(); area=heights[tp]*(st.empty()?i:i-st.peek()-1); if(area>maxarea){ maxarea=area; } } return maxarea; } }
相关文章推荐
- Largest Rectangular Area in a Histogram:leetcode
- leetcode-Largest Rectangular Area in a Histogram
- leetcode 84 :Largest Rectangle in Histogram
- leetcode 84: Largest Rectangle in Histogram
- LeetcodeLargest -84- Rectangle in Histogram 94.01%
- leetcode 84 Largest Rectangle in Histogram
- LeetCode84 Largest Rectangle in Histogram
- leetcode[84]Largest Rectangle in Histogram
- [LeetCode]84 Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- 【leetcode】Array——Largest Rectangle in Histogram(84)
- LeetCode 84 (Largest Rectangle in Histogram)java
- Largest Rectangular Area in a Histogram
- LeetCode(84) Largest Rectangle in Histogram
- [LeetCode 84, 85]Largest Rectangle in Histogram / Maximal Rectangle
- Largest Rectangular Area in a Histogram
- leetcode || 84、Largest Rectangle in Histogram
- [leetcode-84]Largest Rectangle in Histogram(c++)
- leetcode_question_84 Largest Rectangle in Histogram
- LeetCode84——Largest Rectangle in Histogram