C++单调栈输入一个由0和1组成的数组,计算全为1的最大矩形的面积
时间: 2023-07-16 16:17:31 浏览: 79
可以使用单调栈来解决这个问题。
具体来说,我们可以维护一个单调递增栈,其中存储的是数组中元素的下标。遍历数组中的每个元素,如果当前元素小于或等于栈顶元素对应的元素,则将栈顶元素弹出,并且计算以该元素为右边界、以弹出的元素为左边界的最大矩形面积。计算完之后,将当前元素入栈。如果当前元素大于栈顶元素对应的元素,则将当前元素入栈。
在遍历完整个数组之后,栈中剩余的元素对应的矩形面积也可以进行计算。
以下是C++代码实现:
```C++
#include <iostream>
#include <stack>
using namespace std;
int getMaxArea(int hist[], int n) {
stack<int> s;
int max_area = 0;
int tp;
int area_with_top;
int i = 0;
while (i < n) {
if (s.empty() || hist[s.top()] <= hist[i]) {
s.push(i++);
} else {
tp = s.top();
s.pop();
area_with_top = hist[tp] * (s.empty() ? i : i - s.top() - 1);
if (max_area < area_with_top) {
max_area = area_with_top;
}
}
}
while (!s.empty()) {
tp = s.top();
s.pop();
area_with_top = hist[tp] * (s.empty() ? i : i - s.top() - 1);
if (max_area < area_with_top) {
max_area = area_with_top;
}
}
return max_area;
}
int main() {
int hist[] = { 0, 1, 1, 0, 1, 1, 1, 0 };
int n = sizeof(hist) / sizeof(hist[0]);
cout << "Maximum area is " << getMaxArea(hist, n);
return 0;
}
```
输出结果为:
```
Maximum area is 6
```
因此,全为1的最大矩形的面积为6。
阅读全文