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.
1 public class Solution { 2 public int largestRectangleArea(int[] height) { 3 int length = height.length; 4 if(length==0) return 0; 5 Stack<Integer> stack = new Stack<Integer>(); 6 Stack<Integer> len = new Stack<Integer>(); 7 int area = 0; 8 int newNum = 0; 9 for(int i=0;i<=length;i++){ 10 if(i==length) newNum = -1; 11 else{ 12 newNum = height[i]; 13 } 14 if(stack.isEmpty()||stack.peek()<newNum){ 15 stack.push(newNum); 16 len.push(1); 17 } 18 else{ 19 int wid = 0; 20 while(!stack.isEmpty() && stack.peek()>newNum){ 21 int temp = stack.pop(); 22 int tempL = len.pop(); 23 wid += tempL; 24 area = Math.max(area,wid*temp); 25 } 26 len.push(wid+1); 27 stack.push(newNum); 28 } 29 } 30 return area; 31 } 32 }