题目:
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.
找直方图中面积最大的矩形框,求面积。
思路:从左到右处理直方图
public class Solution {
public int largestRectangleArea(int[] heights) {
//栈存储递增的直方图的下标
Deque<Integer> stack = new LinkedList<Integer>();
int result=0;
int i=0;
while (i<heights.length) {
//每次比较栈顶与当前位置的元素大小,若当前值大于栈顶元素,入栈;
//栈为空,入栈
if(stack.isEmpty() || heights[i]>heights[stack.peekFirst()])
stack.addFirst(i++);
else {
//当前值小于栈顶元素,合并现有栈,直到栈顶元素小于当前元素值
int tmp = stack.removeFirst();
result= Math.max(result, heights[tmp]*(stack.isEmpty() ? i : (i-stack.peekFirst()-1)));
}
}
//处理未出栈的元素
while(!stack.isEmpty())
{
int tmp = stack.removeFirst();
result = Math.max(result, heights[tmp]*(stack.isEmpty() ? heights.length : (heights.length-stack.peekFirst()-1)));
}
return result;
}
}