Leetcode 第84題:Largest Rectangle in Histogram--柱狀圖中最大的矩形(C++)

題目地址:Largest Rectangle in Histogram


題目簡介:

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

上述的矩陣寬度均爲1, 給定的高度爲[2,1,5,6,2,3]。

Input: [2,1,5,6,2,3]
Output: 10

題目解析:

看到這個題目以爲和Container With Most Water類似,直接上代碼,於是直接錯誤。原來這個需要挨着纔可以,那麼就來暴力吧。

例如上面的例子序號分別爲[0, 1, 2, 3, 4, 5],可以有[0,1],[0,2],[0,3]...,[4,5]這些區間,剛開始最小的就是單個柱體的高度。碰到挨着最大的組合便更新,好像有不用暴力的方法,但是要去打球了,先貼C++暴力代碼吧。

C++:

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        if (heights.size() == 0)
            return 0;
        int _size = heights.size();
        int _min[_size];
        memset(_min, -1, sizeof(_min));
        int ans = 0;
        for(int i = 0; i < _size; i++)
        {
            if(heights[i] != 0 && ans / heights[i] >= (_size - i)) 
                continue;
            for(int j = i; j < _size; j++)
            {
                if(i == j)
                    _min[j] = heights[j];
                else
                {
                    _min[j] = min(_min[j - 1], heights[j]);
                }
                ans = max(_min[j] * (j - i + 1), ans);
            }
        }
        return ans;
    }
};

Python目測會超時,打球回來再說。

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