微頭條丨#yyds干貨盤點# 名企真題專題:直方圖內最大矩形

2022-12-28 16:22:22 來源:51CTO博客

1.簡述:


(資料圖片僅供參考)

描述

給定一個數組heights,長度為n,height[i]是在第i點的高度,那么height[i]表示的直方圖,能夠形成的最大矩形是多少?

1.每個直方圖寬度都為1

2.直方圖都是相鄰的

3.如果不能形成矩形,返回0即可

4.保證返回的結果不會超過231-1

數據范圍:

如輸入[3,4,7,8,1,2],那么如下:

示例1

輸入:

[3,4,7,8,1,2]

返回值:

14
示例2

輸入:

[1,7,3,2,4,5,8,2,7]

返回值:

16

2.代碼實現:

import java.util.*;public class Solution {    /**     * 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可     *     *      * @param heights int整型一維數組      * @return int整型     */    public int largestRectangleArea (int[] heights) {        //總寬度        int n=heights.length;        //新建單調棧        ArrayDeque stack=new ArrayDeque<>();                int res=0;        for(int i=0;iheights[i]){                //由于單調棧內元素是單調不遞減的,L到i-1之間的高度一定大于等于curHeight                int curHeight=heights[stack.pop()];                //如果棧中元素為空,說明0到i-1之間的高度均大于等于curHeight                int L=stack.isEmpty()?0:stack.peek()+1;                res=Math.max(res,(i-L)*curHeight);            }            stack.push(i);        }                //如果遍歷完之后,單調棧還不為空,則繼續統計可能的最大面積        while(!stack.isEmpty()){            int curHeight=heights[stack.pop()];            int L=stack.isEmpty()?0:stack.peek()+1;            res=Math.max(res,(n-L)*curHeight);        }                return res;    }}

標簽: 大于等于 一維數組 形成矩形

上一篇:sqoop入門教程
下一篇:動態:#yyds干貨盤點# 名企真題專題:末尾0的個數