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
.
public class Solution {
public int largestRectangleArea(int[] height) {
if(height==null || height.length==0) return 0;
LinkedList<Integer> s=new LinkedList<Integer>();
int res=height[0];
int i;
for(i=0;i<height.length;){
if(s.isEmpty() || height[i]>height[s.getLast()] ){
s.add(i++);
}
else{
int tmp=s.pollLast();
res=Math.max(res,
height[tmp]*(s.isEmpty()?i:i-s.getLast()-1));
}
}
while(!s.isEmpty()){
int tmp=s.pollLast();
res=Math.max(res,
height[tmp]*(s.isEmpty()?i:i-s.getLast()-1));
}
return res;
}
}