LeetCode HOT100 - 柱状图中最大的矩形

其实有点奇怪这个题单为什么把这题放在前面一题的后面,这个应该算是 easy 版本,或者那道最大矩形是这题的变种

那就再写一些部分

比如前一篇题解提到栈中的元素是贡献还没处理完的

而它的贡献就是在出栈的时候算的

例如栈中是 2 4

那么出栈的时候下标 4 的元素作用的区间就是 [3, i - 1]
因为下标 2 和 下标 i 的元素都比下标 4 的元素大

还有就是单调栈一般都是严格单调递减/递增栈

这是因为这样元素的意义更加明确,比如就是最右侧的元素,然后逻辑是左右第一个小于它的元素

并且代码的设置是能保证相同元素的处理是正确的,因为比如相同的一直弹出,那么左侧的实际上就是第一个小于这批相同元素的

class Solution {
public:
    int largestRectangleArea(vector<int>& a) {
        int ans = 0;
        int n = a.size();
        vector<int> st;
        for (int i = 0; i <= n; i++) {
            int cur = i == n ? 0 : a[i];
            while (!st.empty() && a[st.back()] >= cur) {
                int mid = st.back();
                st.pop_back();
                ans = max(ans, a[mid] * (i - (st.empty() ? -1 : st.back()) - 1));
            }
            st.emplace_back(i);
        }
        return ans;
    }
};
posted @ 2026-05-08 15:34  rdcamelot  阅读(15)  评论(0)    收藏  举报