leetcode 84. 柱狀圖中最大的矩形
阿新 • • 發佈:2021-06-16
給定 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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
採用單調棧。
publicint 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; }