Maximal Rectangle
来源:互联网 发布:乐视网络大电影合作 编辑:程序博客网 时间:2024/05/29 08:02
题目
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
思路一:O(N4)
遍历,不断更新最大值。
class Solution {public: int maximalRectangle(vector<vector<char> > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function if (matrix.empty() || matrix[0].empty()) return 0; int max = 0; for(int row = 0; row < matrix.size(); row++) for(int col = 0; col < matrix[0].size(); col++){ int area = getArea(matrix, row, col); if (max < area) max = area; } return max; } int getArea(vector<vector<char> > &matrix, int const cornerRow, int const cornerCol){ int maxArea = 0; int maxX = matrix[0].size(); for(int row = cornerRow; row < matrix.size(); ++row){ if (matrix[row][cornerCol] == '0') break; for(int x = cornerCol; x < maxX; ++x){ if (matrix[row][x] == '0'){ maxX = x; break; } } int area = (maxX-cornerCol) * (row-cornerRow+1); if (maxArea <area) maxArea = area; } return maxArea; }};
思路二:O(N3)
用f[i][j]来记录i行以j列为结尾,往前连续的1的个数。然后再一个O(n^3)的循环来找以(i, j)为右下角的矩形最大的1的面积。
上述矩阵将产生:
0 1 2 3 0
0 1 2 3 4
0 0 1 0 1
class Solution { public: int maximalRectangle(vector<vector<char> > &matrix) { // Start typing your C/C++ solution below // DO NOT write int main() function if(matrix.size()==0 || matrix[0].size()==0) return 0; vector<vector<int> > f(matrix.size()+1, vector<int>(matrix[0].size()+1,0)); for(int i=0; i<matrix.size(); i++) f[i][0] = matrix[i][0]=='1'?1:0; // Create the row-lines with number of 1s for(int i=0; i<matrix.size(); i++) for(int j=1; j<matrix[i].size(); j++) f[i][j] = matrix[i][j]=='1'?f[i][j-1]+1:0; // Make (i,j) as the right-bottom corner, and find the max-rows-cols int result = 0; for(int i=0; i<matrix.size(); i++) for(int j=0; j<matrix[i].size(); j++) { int k = i; int width = INT_MAX; while(k >= 0) { if(f[k][j] == 0) break; width = min(width,f[k][j]); result = max(result, width*(i-k+1)); k--; } } return result; } };
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- Maximal Rectangle
- HDU Employment Planning
- pku 1977 Odd Loving Bakers(矩阵快速幂)
- UVa 10050 - Hartals
- Ruby中,在method外和method内定义的@变量是不同的
- win32多线程-异步(asynchronous) I/O
- Maximal Rectangle
- 刚子扯扯蛋:说下百度对网站原创文章的个人感受
- 巧妙解决百度地图加偏纠偏问题
- 把 eclipse 弄成中文的
- Dispatcher initialization failed
- the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is
- SDJZUOJ 1077 美丽数
- CUDA最佳实践(一)
- hdu Employment Planning