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 heights = [2,1,5,6,2,3]
,
return 10
.
用桟
1 class Solution { 2 public int largestRectangleArea(int[] heights) { 3 Stack<Integer> stack = new Stack<Integer>(); 4 5 //array 扩容,在最后一位加上0 6 int[] a = new int[heights.length+1]; 7 for(int i =0;i<heights.length;i++) 8 a[i] = heights[i]; 9 a[heights.length]=0; 10 // 11 12 13 int answer = 0; 14 int temp; 15 for(int i = 0;i<a.length;){ 16 if(stack.isEmpty()||a[i]>a[stack.peek()]){//a[i]与桟顶元素比较 17 stack.push(i); 18 i++; 19 } 20 else{ 21 temp = stack.pop(); 22 answer = Math.max(answer,a[temp]*(stack.isEmpty()?i: i-stack.peek()-1)); 23 //桟为空的时候,需要计算长度为i 高度从0到i最矮的(即桟中最小的元素,弹出后,桟就空了) 24 } 25 } 26 return answer; 27 } 28 }