题目:
思路:
https://blog.csdn.net/qq_28468707/article/details/103682528
https://www.jianshu.com/p/2b9a36a548fa 清晰
代码:
public int largestRectangleArea(int[] heights) {
int[] heightadd = new int[heights.length + 1];
for (int i=0;i<heights.length;i++) {
heightadd[i] = heights[i];
}
heightadd[heights.length] = 0; // 为了末尾计算,
Stack<Integer> stack = new Stack<>();
stack.push(0);
int maxArea = 0;
for (int i=0;i<heightadd.length;i++) {
while (!stack.isEmpty() && heightadd[stack.peek()] > heightadd[i]) { // 开始计算
int high = stack.pop();
int width = stack.isEmpty() ? i : i - stack.peek() - 1;
int area = width * heights[high]; // 这里高和宽容易出错,注意
maxArea = Math.max(maxArea, area);
}
stack.push(i);
}
return maxArea;
}