class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
if (heights.size() <= 0) return 0;
heights.insert(heights.begin(), 0);
heights.push_back(0);
stack<int> s;
s.push(0);
int ret = heights[0];
for (int i = 1; i < heights.size(); i++) {
if (heights[i] >= heights[s.top()]) {
s.push(i);
} else {
while( !s.empty() && heights[i] < heights[s.top()]) {
int mid = s.top();
s.pop();
if ( !s.empty() ) {
int left = s.top();
int right = i;
int w = right - left - 1;
int h = heights[mid];
ret = std::max(ret, h * w);
}
}
s.push(i);
}
}
return ret;
}
};
Day52 单调栈
于 2023-06-18 16:18:22 首次发布