1. 程式人生 > 其它 >leetcode 84. 柱狀圖中最大的矩形

leetcode 84. 柱狀圖中最大的矩形

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為[2,1,5,6,2,3]。

圖中陰影部分為所能勾勒出的最大矩形面積,其面積為10個單位。

示例:

輸入: [2,1,5,6,2,3]
輸出: 10

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/largest-rectangle-in-histogram
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

採用單調棧。

    public
int largestRectangleArea(int[] heights) { if (heights == null || heights.length == 0) { return 0; } int length = heights.length; Stack<Integer> index = new Stack<>(); Stack<Integer> value = new Stack<>(); int max = 0; index.add(
-1); value.add(0); for (int i = 0; i < length; i++) { int v = heights[i]; if (value.peek() > v) { Integer st = index.peek(); while (value.peek() > v) { int item = value.pop(); index.pop();
int l = st - index.peek(); max = Math.max(max, l * item); } } value.add(v); index.add(i); } if (!value.isEmpty()) { Integer st = index.peek(); while (value.size() > 1) { int item = value.pop(); index.pop(); int l = st - index.peek(); max = Math.max(max, l * item); } } return max; }