一:题目
二:上码
class Solution {
public:
/**
思路:
1.这里单调栈的顺序是 从栈顶到栈底 是递减的 因为我们在求出 比栈顶下标所对应的元素的小的元素时候
要将栈顶元素出栈 此时 新的栈顶元素(left) 和 已出的栈顶元素(mid) 以及 height[i] (right)
这是时候我们可以进行一次求取最值的 ans = max(anx,height[mid]*(right-left))
*/
int largestRectangleArea(vector<int>& height) {
height.insert(height.begin(),0);
height.push_back(0);
stack<int> st;
st.push(0);
int ans = 0;
for(int i = 1; i < height.size(); i++) {
if (height[i] > height[st.top()]) {
st.push(i);
} else if (height[i] == height[st.top()]) {
st.push(i);
} else {
while(!st.empty() && height[i] < height[st.top()]) {//这里我们从栈顶到栈底是递减的
int mid = st.top();
st.pop();
int left = st.top();
int right = i;
int h = height[mid];//矩形的高
int w = right - left - 1;
ans = max(ans,h*w);
}
st.push(i);
}
}
return ans;
}
};
水了一道 啊呜呜呜呜呜呜呜