85. Maximal Rectangle 一行一行遍历方形
来源:互联网 发布:淘宝皮草款式 编辑:程序博客网 时间:2024/06/08 08:02
题目:
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0Return 6.
分析:
思路同样是从第一行开始一行一行地处理,使[i, j]处最大子矩阵的面积是(right(i, j)-left(i, j))*height(i, j)。其中height统计当前位置及往上'1'的数量;left和right是高度是当前点的height值得左右边界,即是以当前点为中心,以height为高度向两边扩散的左右边界。
递推公式如下:
left(i, j) = max(left(i-1, j), cur_left);right(i, j) = min(right(i-1, j), cur_right);height(i, j) = height(i-1, j) + 1, if matrix[i][j]=='1';height(i, j) = 0, if matrix[i][j]=='0'.
其中cur_left和cur_right的值由当前行决定,如果当前位置是'1',则cur_left和cur_right都不变;如果当前位置是'0',则cur_left就为当前位置的右侧,cur_right就为当前位置(因为左闭右开)。
时间复杂度:O(mn)
空间复杂度:O(n)
代码:
class Solution {public: int maximalRectangle(vector<vector<char>>& matrix) { if(matrix.empty()) return 0; int m = matrix.size(); int n = matrix[0].size(); vector<int> left(n, 0), right(n, n), height(n, 0); int maxA = 0; for(int i=0; i<m; i++) { int cur_left=0, cur_right=n; for(int j=0; j<n; j++) { // compute height (can do this from either side) if(matrix[i][j]=='1') height[j]++; else height[j]=0; } for(int j=0; j<n; j++) { // compute left (from left to right) if(matrix[i][j]=='1') left[j]=max(left[j],cur_left); else {left[j]=0; cur_left=j+1;} } // compute right (from right to left) for(int j=n-1; j>=0; j--) { if(matrix[i][j]=='1') right[j]=min(right[j],cur_right); else {right[j]=n; cur_right=j;} } // compute the area of rectangle (can do this from either side) for(int j=0; j<n; j++) maxA = max(maxA,(right[j]-left[j])*height[j]); } return maxA; }};
阅读全文
0 0
- 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
- 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
- No Module Named '_pywrap_tensorflow_internal'
- 关于源文件ALIAS_OBJ的解析
- CCPC2017网络赛1003Friend-Graph——暴力
- 讲解根据等式求进制问题
- 百练2745:显示器
- 85. Maximal Rectangle 一行一行遍历方形
- CodeForces
- NYOJ16 矩形嵌套 (最长递增子序列)
- 河南省多校连萌(四)
- JS面试题及答案
- 多线程与死锁
- C++学习笔记系列一
- Java线程八锁
- Hibernate的count(*)函数通过调用uniqueResult方法的返回值类型