1. 程式人生 > 其它 >計算矩陣連乘積

計算矩陣連乘積

技術標籤:題目leetcode

給定 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; } }