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 =
10unit.
For example,
Given height =[2,1,5,6,2,3],
return10.
本题没有做出来,是参考http://blog.csdn.net/doc_sgl/article/details/11805519。
public int largestRectangleArea(int[] height) {
if (height == null || height.length == 0) {
return 0;
}
int len = height.length;
int[] newHeight = new int[len + 1];
for (int i = 0; i < len; i++) {
newHeight[i] = height[i];
}
newHeight[len] = 0;
Stack<Integer> stack = new Stack<Integer>();
int i = 0;
int max = 0;
while(i < newHeight.length) {
if (stack.isEmpty() || newHeight[stack.peek()] <= newHeight[i]) {
stack.push(i);
i++;
} else {
while (!stack.isEmpty() && newHeight[stack.peek()] > newHeight[i]) {
int h = newHeight[stack.peek()];
stack.pop();
int wide;
if (stack.isEmpty()) {
wide = i;
} else {
wide = i - stack.peek() - 1;
}
int tempMax = h * wide;
if (max < tempMax) {
max = tempMax;
}
}
stack.push(i);
i++;
}
}
return max;
}
Largest Rectangle in Histogram,布布扣,bubuko.com
Largest Rectangle in Histogram
原文地址:http://blog.csdn.net/u010378705/article/details/29360269