C++单调栈手动输入一个由0和1组成的数组,计算全为1的最大矩形的面积
时间: 2023-07-16 18:17:34 浏览: 72
C++计算矩形的面积
以下是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() == false) {
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 n;
cout << "请输入数组大小:";
cin >> n;
int hist[n];
cout << "请输入数组元素(0/1):" << endl;
for (int i = 0; i < n; i++) {
cin >> hist[i];
}
cout << "全为1的最大矩形面积为:" << getMaxArea(hist, n) << endl;
return 0;
}
```
代码思路:
1. 使用单调栈存储数组元素的下标,遍历整个数组。
2. 如果栈为空或当前元素大于等于栈顶元素,则将当前元素下标入栈。
3. 如果当前元素小于栈顶元素,则弹出栈顶元素,并计算以该元素高度为高的最大面积。面积的计算方法为:弹出元素的高度 * (右边第一个小于该元素的元素下标 - 左边第一个小于该元素的元素下标 - 1)。
4. 如果当前计算出的面积大于之前的最大面积,则更新最大面积。
5. 遍历完数组后,如果栈中还有元素,则按照步骤3计算面积并更新最大面积。
6. 返回最大面积。
阅读全文