1. 程式人生 > 其它 >演算法練習帖--42--柱狀圖中最大的矩形(Java)

演算法練習帖--42--柱狀圖中最大的矩形(Java)

技術標籤:演算法演算法貪心演算法

柱狀圖中最大的矩形

一、題目簡介

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
(題目來源:力扣官網

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
在這裡插入圖片描述
以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為 [2,1,5,6,2,3]。
在這裡插入圖片描述

示例:
輸入: [2,1,5,6,2,3]
輸出: 10

二、解決方法

  1. 貪心演算法
    可以想象成按每個單獨的矩形橫切所有矩形,求最大面積的那個
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; } }
  1. 更多解法:連結