[LeetCode]Maximal Square
2015-06-06 14:54
246 查看
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
For example, given the following matrix:
Return 4.
We need to construct a matrix Dp[m*n]. f(m,n) equals the situation when the square's right-down top point is(m,n) ,the square's large. So the Dynamic Equation is :
f(m.n) = matrix[m]
( m=0 or n=0 );
when matrix(m,n) = 1:f(m,n) = min(f(m-1,n),f(n-1,m),f(n-1,m-1))+1;
when matrix(m,n)= 0; f(m,n) = 0;
and search all the point,find the max square. It's the max square.(you can search it just when you construct f(m,n) matrix.)
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return 4.
We need to construct a matrix Dp[m*n]. f(m,n) equals the situation when the square's right-down top point is(m,n) ,the square's large. So the Dynamic Equation is :
f(m.n) = matrix[m]
( m=0 or n=0 );
when matrix(m,n) = 1:f(m,n) = min(f(m-1,n),f(n-1,m),f(n-1,m-1))+1;
when matrix(m,n)= 0; f(m,n) = 0;
and search all the point,find the max square. It's the max square.(you can search it just when you construct f(m,n) matrix.)
class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { if(matrix.size()==0) return 0; vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size())); int res = dp[0][0]; for(int i=0;i<matrix.size();++i){ dp[i][0] = matrix[i][0]-'0'; if(dp[i][0]>res) res = dp[i][0]; } for(int j=0;j<matrix[0].size();++j){ dp[0][j] = matrix[0][j]-'0'; if(dp[0][j]>res) res = dp[0][j]; } for(int i=1;i<matrix.size();++i){ for(int j=1;j<matrix[0].size();++j){ if(matrix[i][j]=='0') dp[i][j] = 0; if(matrix[i][j]=='1') { dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1; if(dp[i][j]>res) res = dp[i][j]; } } } return res*res; } int min(int a,int b,int c){ if(a<=b&&a<=c) return a; if(b<=a&&b<=c) return b; if(c<=a&&c<=b) return c; } };
相关文章推荐
- 《数据结构学习与实验指导》3-7求前缀表达式的值/3-8堆栈模拟队列
- [leetcode 8] String to Integer
- Service类onStartCommand()返回值讲解.
- offsetof(s,m)解析
- 随机数
- 某大学程序设计竞赛
- PHP-字符串过长不用担心
- C++ MFC Tab Control控件的详细使用
- xUtils 关联对象查询
- ios学习笔记: TableView利用label调整cell高度
- Sqoop-1.4.4工具import和export使用详解
- leetcode--Reverse Linked List
- THINKPHP3.2在MAC上出现的奇怪问题
- 在VC中调用 WebService
- M.M神话 (人月神话) 写写'银'生
- C#中的匿名方法实例解析
- ubuntu中flashplugin-installer:downloading无反映的问题
- Google的URL编码解码之delphi
- 其它可用贪心算法求解的问题
- 0基础,安卓搭建环境,运行HelloWord