- 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.
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.
Example:
Input: [2,1,5,6,2,3]
Output: 10
这篇博客讲的很详细
https://www.cnblogs.com/ganganloveu/p/4148303.html
class Solution {
public int largestRectangleArea(int[] heights) {
if(heights.length==0)return 0;
if(heights.length==1)return heights[0];
Stack<Integer> stack=new Stack<Integer>();
int area=0,count=1;
stack.push(heights[0]);
for(int i=1;i<heights.length;i++){
if(heights[i]<stack.peek()){
count=1;
area=Math.max(area,count*stack.pop());
while(!stack.isEmpty()&&heights[i]<stack.peek()){
count++;
area=Math.max(area,count*stack.pop());
}
for(int j=0;j<=count;j++){
stack.push(heights[i]);
}
}else{
stack.push(heights[i]);
}
}
count=1;
while(!stack.isEmpty()){
area=Math.max(area,count*stack.pop());
count++;
}
return area;
}
}