题目
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.
解析
class Solution {
public int largestRectangleArea(int[] heights) {
int n = heights.length;
Stack<Integer> s = new Stack<>();
int maxAera = 0;
int tp; //用来保存 栈顶
int aeraWithTop;
int i = 0;
while (i < n) {
//栈为空或者比栈顶元素大,入栈
if (s.isEmpty() || heights[i] >= heights[s.peek()]) {
s.push(i++);
} else {
tp = s.pop();
//当前高度 * 宽度(s.peek() 表示左边元素,i为右边元素)
aeraWithTop = heights[tp] * (s.isEmpty() ? i : i - s.peek() - 1);
if (maxAera < aeraWithTop) {
maxAera = aeraWithTop;
}
}
}
while (s.isEmpty() == false) {
tp = s.pop();
aeraWithTop = heights[tp] * (s.isEmpty() ? i : i - s.peek() - 1);
if (maxAera < aeraWithTop) {
maxAera = aeraWithTop;
}
}
return maxAera;
}
}