Largest Rectangle in Histogram

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     }
View Code

 

posted @ 2014-02-06 14:41  krunning  阅读(225)  评论(0)    收藏  举报