(60/60)last dance|柱状图中最大的矩形

last dance

柱状图中最大的矩形

leetcode:84. 柱状图中最大的矩形

单调栈

思路

和接雨水很类似,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)

注意点

  1. 尾加0后还是要遍历到heights.size()-1,因为是以取出元素为基准计算的,而取出元素是当前遍历元素的上一个。

代码实现

class Solution {
public:
/*
类接雨水,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)

*/
    int largestRectangleArea(vector<int>& heights) {
        stack<int> st;  // 存下标
        st.push(0);
        int result = 0;
        heights.insert(heights.begin(),0);heights.push_back(0);
        for(int i = 1;i < heights.size();i++){
            while(!st.empty() && heights[i] < heights[st.top()]){
                int mid = st.top();st.pop();
                if(!st.empty()){
                    int h = heights[mid];   // 以当前取出元素为基准
                    int w = i - st.top() - 1;
                    result = max(result,h*w);
                }
            }
            st.push(i);
        }

        return result;
    }
};
posted @ 2024-03-28 17:05  Tazdingo  阅读(24)  评论(0)    收藏  举报