单调栈c++全为1的最大矩形面积
时间: 2023-06-21 17:06:30 浏览: 108
最大矩形面积问题
4星 · 用户满意度95%
单调栈可以用来解决这个问题,具体做法如下:
1. 定义一个栈,存储递增的矩形高度的下标。
2. 遍历每个矩形的高度,如果当前高度小于等于栈顶的高度,弹出栈顶元素,并且计算以弹出元素的高度为高的矩形面积。
3. 栈顶元素弹出后,新的栈顶元素和当前高度形成的矩形的宽度是之前弹出元素的右边界和当前元素的左边界。
4. 将当前元素的下标入栈。
5. 重复步骤2到4直到数组末尾。
6. 如果栈不为空,继续弹出栈顶元素,计算以弹出元素高度为高的矩形面积。
7. 取所有矩形面积的最大值作为答案。
C++代码实现如下:
```c++
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int largestRectangleArea(vector<int>& heights) {
stack<int> s;
int maxArea = 0;
int n = heights.size();
for (int i = 0; i <= n; i++) {
while (!s.empty() && (i == n || heights[s.top()] >= heights[i])) {
int height = heights[s.top()];
s.pop();
int width = s.empty() ? i : i - s.top() - 1;
maxArea = max(maxArea, height * width);
}
s.push(i);
}
return maxArea;
}
int main() {
vector<int> heights = {1, 1, 1, 1, 1, 1, 1, 1};
cout << largestRectangleArea(heights) << endl;
return 0;
}
```
阅读全文