0
点赞
收藏
分享

微信扫一扫

leetcode柱状图中的最大矩形问题

链接

  • https://leetcode-cn.com/problems/largest-rectangle-in-histogram/

分析

  • 使用单调栈进行求解

代码缺陷

  • 使用大量的空间
  • 并且求解当前位置的左右两边第一个小于当前位置高度的方法,十分粗暴

源代码

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int result = 0;
        vector<int> l(heights.size(), -1);
        vector<int> r(heights.size(), heights.size());
        stack<int> s1;
        stack<int> s2;
        for (int i = 0; i < heights.size(); ++i) {
            if (!s1.empty() && heights[i] > heights[s1.top()]) {
                l[i] = s1.top();
            }
            while (!s1.empty() && heights[i] < heights[s1.top()]) {
                r[s1.top()] = i;
                s1.pop();
            }
            s1.push(i);

            if (!s2.empty() && heights[heights.size()-i-1] > heights[s2.top()]) {
                r[heights.size()-i-1] = s2.top();
            }
            while (!s2.empty() && heights[heights.size()-i-1] < heights[s2.top()]) {
                l[s2.top()] = heights.size()-i-1;
                s2.pop();
            }
            s2.push(heights.size()-i-1);
        }
       
        for (int i = 0; i < heights.size(); ++i) {
            result = max(result, heights[i] * (r[i] - l[i] - 1));
        }
        
        
        return result;

    
    }
};



举报

相关推荐

0 条评论