class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
heights.push_back(0);
int len = heights.size();
stack<int> increaseStack; //单调递增栈中存放的是位置
int ret = 0;
for (int i = 0; i < len; i++) {
while (!increaseStack.empty() && heights[increaseStack.top()] > heights[i]) {
// 找出当前的位置
int pos = increaseStack.top();
increaseStack.pop();
// 左边界为l, 有边界为i
int l = increaseStack.empty() ? -1 : increaseStack.top();
ret = max(ret, heights[pos] * (i - 1 - l));
}
increaseStack.push(i);
}
return ret;
}
};
0084
最新推荐文章于 2024-07-09 11:17:06 发布