java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形
84. 柱狀圖中最大的矩形
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。
圖中陰影部分為所能勾勒出的最大矩形面積,其面積為 10 個單位。
示例:
輸入: [2,1,5,6,2,3]
輸出: 10
class Solution {
/**
* 利用單調棧 求解,總體思路是 以柱子i高度為矩形高度時所能形成最大面積(利用性質找出第i個柱子向左邊和右邊遍歷時第一個比它低的柱子)
* 單調棧定義:只存高度遞增的柱子
* 性質
* 出棧時:
* 那么如果單調棧為空了:說明沒有比這個柱子更低的了(矩形寬度為這根柱子的序號:左邊沿為0)
* 如果單調棧不為空:說明棧里面的柱子高度都小,那么左邊沿為棧頂柱子的序號
*
* 矩形右邊沿為i 因為你出棧 就說明你比別人低了,這已經是你能達到的面積極限了.出棧記錄面積
* **/
public static int largestRectangleArea(int[] heights) {
int heightn[] =new int[heights.length+1];
for (int i = 0; i < heights.length; i++) {
heightn[i] = heights[i];
}
heightn[heights.length] = 0; //最后增加個高度為0 的柱子,以便吧單調棧里面的都彈出去。
Deque stack =new ArrayDeque<>(); //存儲序號
int maxS=0;
for (int i = 0; i < heightn.length;i++) {
while (!stack.isEmpty() && heightn[i]
int temp=stack.pop();
//這里是遞減數列得長度
maxS= Math.max(maxS,( ( stack.isEmpty()?i:(i-stack.peek()-1) )*heights[temp] ));
}
stack.push(i); //入棧
}
return maxS;
}
}
總結
以上是生活随笔為你收集整理的java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 小题目_java一个小题目
- 下一篇: 奥的斯电梯tt服务器使用表_奥的斯电梯服