public class Solution {
public int largestRectangleArea(int[] height) {
int[] h = new int[height.length+1];
for(int x=0; x<height.length; x++){
h[x] = height[x];
}
h[height.length] = 0;
int i = 0, maxArea = 0;
Stack<Integer> s = new Stack<>();
while(i<h.length){
if(s.empty() || h[i]>h[s.peek()]){
s.push(i);
i++;
}else{
int tmp = s.peek();
s.pop();
maxArea = Math.max(maxArea, h[tmp]*(s.empty()? i : i-1-s.peek()));//
}
}
return maxArea;
}
}
分析: 思路是参考别人的。基本原理是,维护一个递增的栈,每次取比当前i大的元素乘以可以包容的最大宽度
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.
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]
.
The largest rectangle is shown in the shaded area, which has area = 10
unit.
For example,
Given height = [2,1,5,6,2,3]
,
return 10
.