85. Maximal Rectangle
来源:互联网 发布:网面白鞋怎么清洗知乎 编辑:程序博客网 时间:2024/05/21 10:39
此题是之前那道的求直方图最大矩形面积的扩展,这道题的二维矩阵每一层向上都可以看做一个直方图,输入矩阵有多少行,就可以形成多少个直方图,对每个直方图都调用那道题中的方法,就可以得到最大的矩形面积。那么这道题唯一要做的就是将每一层构成直方图,由于题目限定了输入矩阵的字符只有 '0' 和 '1' 两种,所以处理起来也相对简单。方法是,对于每一个点,如果是‘0’,则赋0,如果是 ‘1’,就赋 之前的height值加上1。
class Solution {public: int maximalRectangle(vector<vector<char>>& matrix) { if(matrix.empty() || matrix[0].empty()) return 0; int rows = matrix.size(), cols = matrix[0].size(); int res = 0; vector<int> heights(cols, 0); for(int i = 0; i < rows; ++i){ for(int j = 0; j < matrix[i].size(); ++j){ heights[j] = (matrix[i][j] == '0')?0:heights[j]+1; } res = max(res, largestRectangleArea(heights)); } return res; } int largestRectangleArea(vector<int>& heights){ int res = 0; stack<int> s; heights.push_back(0); for (int i = 0; i < heights.size(); ++i) { while (!s.empty() && heights[s.top()] >= heights[i]) { int cur = s.top(); s.pop(); res = max(res, heights[cur] * (s.empty() ? i : (i - s.top() - 1))); } s.push(i); } return res; }};
阅读全文
0 0
- LeetCode 85. Maximal Rectangle
- [Leetcode] 85. Maximal Rectangle
- LeetCode --- 85. Maximal Rectangle
- [LeetCode]*85.Maximal Rectangle
- 85. Maximal Rectangle
- [leetcode] 85.Maximal Rectangle
- Leetcode 85. Maximal Rectangle
- 85. Maximal Rectangle
- leetcode 85. Maximal Rectangle
- LeetCode 85. Maximal Rectangle
- Leetcode 85. Maximal Rectangle
- Leetcode:85. Maximal Rectangle
- LeetCode 85. Maximal Rectangle
- LeetCode-85.Maximal Rectangle
- leetcode.85. Maximal Rectangle
- 85. Maximal Rectangle
- leetcode 85. Maximal Rectangle
- 85. Maximal Rectangle
- 树莓派3b使用一路继电器控制小风扇
- 我说设计模式
- 【NOIP2017提高A组集训10.28】序列操作
- 自己动手,写一个简单的线程池(3)
- 递归和非递归的方式实现二叉树的先序、中序和后序遍历
- 85. Maximal Rectangle
- Nginx服务器安装及配置文件详解
- Unity3D 热更新方案(集合各位专家的汇总)
- easydss与linux内核接收网络数据流程(二)
- 171029—函数自学【函数地址和函数指针】
- 15.4.3 转换流
- Codeforces 24D 期望DP 解题报告
- 零基础学图形学(2) 几何知识——点,向量,法向量
- 【数论】c