演算法練習帖--42--柱狀圖中最大的矩形(Java)
阿新 • • 發佈:2020-12-28
柱狀圖中最大的矩形
一、題目簡介
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
(題目來源:力扣官網)
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。
示例:
輸入: [2,1,5,6,2,3]
輸出: 10
二、解決方法
- 貪心演算法
可以想象成按每個單獨的矩形橫切所有矩形,求最大面積的那個
package com.lxf.test;
public class LargestRectangleArea {
public static void main(String[] args) {
System.out.println(largestRectangleArea(new int[]{2,1,2}));
}
public static int largestRectangleArea(int[] heights) {
int maxArea=0;
//遍歷陣列的每一個值
for (int i = 0; i < heights.length; i++) {
int curArea=heights[i];
int j=i;
int k=i;
//當前數字向右搜尋比它大的最後一個數字的下標
while(j<heights.length&&curArea<=heights[j]){
j++;
}
//當前數字向左搜尋比它大的最後一個數字的下標
while(k>=0&&curArea<=heights[k]){
k--;
}
//兩下標相減再減1乘以當前數字就是矩形的面積了,記錄每個面積的最大值
maxArea=Math.max(maxArea, (j-k-1)*heights[i]);
}
return maxArea;
}
}
- 更多解法:連結