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目测会超时,打球回来再说。

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