2024-03-19 leetcode写题记录

1|02024-03-19 leetcode写题记录

1|185. 最大矩形

1|0题目链接

85. 最大矩形

1|0题意

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

image

1|0解法

先对每个元素求出其往上能延伸的高度,然后再对每一行作为下边界考虑,考虑行里每个元素作为连续区间里最小元素的情况,从而就变成了求每个元素往左右两边找比自身的高度更低的元素所在的位置,用单调栈跑一遍就行。

class Solution { public: int maximalRectangle(vector<vector<char>> matrix) { int n = matrix.size(), m = matrix[0].size(); vector<vector<int>> h(n, vector<int>(m, 0)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (matrix[i][j] == '0') continue; if (i == 0) h[i][j] = 1; else h[i][j] = h[i - 1][j] + 1; } } int ans = 0; for (int i = 0; i < n; ++i) { stack<int> s; vector<int> l(m, 0), r(m, m - 1); for (int j = 0; j < m; ++j) { while (!s.empty() && h[i][s.top()] >= h[i][j]) { r[s.top()] = j - 1; s.pop(); } if (!s.empty()) l[j] = s.top() + 1; s.push(j); } for (int j = 0; j < m; ++j) ans = max(ans, (r[j] - l[j] + 1) * h[i][j]); } return ans; } };

__EOF__

本文作者FlyingLight
本文链接https://www.cnblogs.com/FlyingLight/p/18086207.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FlyingLight  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示