1,原文地址
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
2,題目
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]。
圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10 個單位。
3,源碼:
核心思路:
核心還是先遍歷棒子,找出棒子的右邊界。
針對那些暫時找不到右邊界的棒子,先放入棧中暫存。
最後再遍歷棧。
class Solution {
public int largestRectangleArea(int[] heights) {
Stack<Integer> stack = new Stack<>();
stack.push(-1);
int maxArea = 0;
//先遍歷一遍,找出當前的棒子的右邊界
for(int i = 0;i<heights.length;i++){
while (stack.peek() != -1 && heights[stack.peek()] > heights[i]){
maxArea = Math.max(maxArea,heights[stack.pop()]*(i-stack.peek() -1));
}
stack.push(i);
}
//找出剩下棒子的邊界
while (stack.peek() !=-1){
maxArea = Math.max(maxArea,heights[stack.pop()]* (heights.length-stack.peek()-1));
}
return maxArea;
}
}