計算矩陣連乘積
阿新 • • 發佈:2021-01-06
給定 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 class MyTest {
public static void main(String[] args) {
int param[] = {2,1,2};
System.out.println(getMaxArea(param));
}
/**
* 獲取最大矩形面積
* @param param 高度陣列
* @return
*/
public static int getMaxArea (int[] param){
int maxArea = 0;
for( int i = 0;i < param.length;i++){
if (i==0){
maxArea = getArea(param,i);
}else {
maxArea = maxArea > getArea(param,i)?maxArea:getArea(param,i);
}
}
return maxArea;
}
/**
* 獲取矩形面積
* @param param 高度陣列
* @param index 陣列下標
* @return
*/
public static int getArea(int[] param ,int index){
int area = param[index];
int width = 1;
//往右計算
for(int i = index+1 ;i<param.length;i++){
if(param[i]>=param[index]){
width ++ ;
}else {
break;
}
}
//往左計算
for(int i = index-1 ;i>=0;i--){
if(param[i]>=param[index]){
width ++ ;
}else {
break;
}
}
return area * width;
}
}