LeetCode——84.柱狀圖中最大的矩形

LeetCode——84.柱狀圖中最大的矩形

題目

84.柱狀圖中最大的矩形
給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度爲 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

在這裏插入圖片描述
以上是柱狀圖的示例,其中每個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]。
在這裏插入圖片描述
圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10 個單位。

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

解析

暴力解法

依次遍歷元素,然後設置兩個指針,初始化爲當前元素位置,一個往左,一個往右,只要高度比當前元素高,就移動指針,最後計算兩個指針間的距離,然後乘上當前高度就是當前元素對應的面積,最後返回最大的面積就行了。

其他方法後續更新

代碼

暴力解法

//暴力解法1
class Solution0084_01 {
    public int largestRectangleArea(int[] heights) {
        int len = heights.length; //數組長度

        if (len==0){
            return 0;
        }

        int res=0; //結果

        //從左到右遍歷柱狀圖
        for (int i = 0; i < len; i++) {
            //定義往左、往右兩個指針,初始化爲當前位置
            int left=i;
            int right=i;

            //只要左邊的比當前的高,就可以連續並圍城矩形
            while ( left>0 && heights[left-1] >= heights[i]){
                left--; //左指針左移,將其包裹在內
            }

            //右邊同理
            while (right<len-1 && heights[right+1] >= heights[i]){
                right++; //右指針右移,將其包裹在內
            }

            int width = right - left + 1;
            res = Math.max(res, width * heights[i]);

        }

        return res;
    }
}

在這裏插入圖片描述

存一下當前高度,更快一點 int curHeight = heights[i];

//暴力解法2
class Solution0084_02 {
    public int largestRectangleArea(int[] heights) {
        int len = heights.length; //數組長度

        if (len==0){
            return 0;
        }

        int res=0; //結果

        //從左到右遍歷柱狀圖
        for (int i = 0; i < len; i++) {
            //定義往左、往右兩個指針,初始化爲當前位置
            int left=i;
            int right=i;

            //當前柱的高度
            int curHeight = heights[i];

            //只要左邊的比當前的高,就可以連續並圍城矩形
            while ( left>0 && heights[left-1] >= curHeight){
                left--; //左指針左移,將其包裹在內
            }

            //右邊同理
            while (right<len-1 && heights[right+1] >= curHeight){
                right++; //右指針右移,將其包裹在內
            }

            int width = right - left + 1;
            res = Math.max(res, width * curHeight);

        }

        return res;
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章