class Solution {
public int largestRectangleArea(int[] heights) {
Stack<Integer> stack = new Stack<>();
int[] newHeights = new int[heights.length + 2];
newHeights[0] = 0;
newHeights[newHeights.length - 1] = 0;
int res = 0;
for (int i = 0; i < heights.length; i++) {
newHeights[i + 1] = heights[i];
}
stack.push(0);
for (int i = 1; i < newHeights.length; i++) {
if (newHeights[i] > newHeights[stack.peek()]) {
stack.push(i);
} else if (newHeights[i] == newHeights[stack.peek()]) {
stack.pop();
stack.push(i);
} else {
while (!stack.isEmpty() && newHeights[i] < newHeights[stack.peek()]) {
int mid = stack.peek();
stack.pop();
int left = stack.peek();
int w = i - left - 1;
int h = newHeights[mid];
int area = w * h;
res = Math.max(area, res);
}
stack.push(i);
}
}
return res;
}
}
代码随想录训练营第三十期|第六十天|单调栈part03|● 84.柱状图中最大的矩形
于 2024-03-14 14:27:49 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)