单调栈C++只有0和1的矩阵中获取只有1的最大矩阵面积
时间: 2023-11-22 15:56:56 浏览: 33
单调栈可以用来解决只有0和1的矩阵中获取只有1的最大矩阵面积的问题。
算法步骤如下:
1. 定义一个height数组,其中height[i]表示第i行到当前行(包括当前行)这一列上方连续的1的高度。
2. 对于每一行,使用单调栈来计算以该行为底的最大矩形面积。将height数组看作一个直方图,问题转化为求直方图中的最大矩形面积。
3. 对于每一行,使用单调栈来确定左右边界。对于每个元素i,如果它比栈顶元素小,则弹出栈顶元素,并计算以该元素为高的最大矩形面积。此时左边界为栈顶元素的下一个元素,右边界为当前元素i。
4. 计算所有以当前行为底的矩形面积,取其中的最大值即为所求。
代码如下:
```cpp
int maximalRectangle(vector<vector<char>>& matrix) {
if (matrix.empty()) return 0;
int n = matrix.size(), m = matrix[0].size(), ans = 0;
vector<int> height(m, 0);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (matrix[i][j] == '1') height[j]++;
else height[j] = 0;
}
stack<int> s;
for (int j = 0; j <= m; j++) {
while (!s.empty() && (j == m || height[s.top()] > height[j])) {
int h = height[s.top()];
s.pop();
int w = s.empty() ? j : j - s.top() - 1;
ans = max(ans, h * w);
}
s.push(j);
}
}
return ans;
}
```