公告

Welcome

Skip to content

题目

84. 柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

示例 1:

输入: heights = [2,1,5,6,2,3] 输出: 10 解释: 最大的矩形为图中红色区域,面积为 10

示例 2:

输入: heights = [2,4] 输出: 4

提示:

  • 1 <= heights.length <=105
  • 0 <= heights[i] <= 104

思路

题解

cpp
class Solution
{
public:
    int largestRectangleArea(vector<int> &heights)
    {
        
        if(heights.size() == 1) return heights[0];
        if(heights.size() == 2) return max(min(heights[0],heights[1])*2,max(heights[0],heights[1]));
        heights.insert(heights.begin(),0);
        heights.push_back(0);
        int result = 0;
        stack<int> s;
        s.push(0);
        for(int i = 1; i < heights.size(); i++)
        {
            if(heights[i] > heights[s.top()])
            {
                s.push(i);
            }
            else if(heights[i] == heights[s.top()])
            {
                s.pop();
                s.push(i);
            }
            else
            {
                while (!s.empty() && heights[i] < heights[s.top()])
                {
                    int mid = s.top();
                    s.pop();
                    if (!s.empty())
                    {
                        result = max(result, (i - 1 - s.top()) * heights[mid]);
                    } 
                }
                s.push(i);
                    
            }
        }
        return result;
    }
};

上次更新于: