leetCode_Maximal Square
来源:互联网 发布:网络直播合同范本 编辑:程序博客网 时间:2024/06/06 02:35
题意:在一个由0和1组成的数组中,找出最大的全由1构成的正方形
方法一:用sum数组记录从(0,0)点到该点的和,枚举对角线,枚举起点和终点,通过sum数组计算是否和题意。
int maximalSquare(vector<vector<char> >& matrix){ int i,j,k,tempAns=0,res=0,ij,ik; if(matrix.size()==0) return 0; int sum[500][500]; sum[0][0]=matrix[0][0]-'0'; for(i=1; i<matrix.size(); i++) sum[i][0]=sum[i-1][0]+matrix[i][0]-'0'; for(i=1; i<matrix[0].size(); i++) sum[0][i]=sum[0][i-1]+matrix[0][i]-'0'; for(i=1; i<matrix.size(); i++) { for(j=1; j<matrix[i].size(); j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+matrix[i][j]-'0'; } int start,end; start=-1*(matrix[0].size()-1); end=matrix.size()-1; for(i=start; i<=end; i++) { int t; if(i<=0) t=0; else t=i; for(t; t<matrix.size(); t++) { ij=t; j=t; tempAns=0; while(j>=0&&j<matrix.size()&&j-i>=0&&j-i<matrix[0].size()) { int tempSum=sum[j][j-i]; if(ij-i-1>=0&&ij-i-1<matrix[0].size()) tempSum=tempSum-sum[j][t-i-1]; if(ij-1>=0&&ij-1<matrix.size()) tempSum=tempSum-sum[t-1][j-i]; if(ij-i-1>=0&&ij-i-1<matrix[0].size()&&ij-1>=0&&ij-1<matrix.size()) tempSum=tempSum+sum[t-1][t-i-1]; if(tempSum==(j-t+1)*(j-t+1)) { tempAns++; if(tempAns>res) res=tempAns; } else break; j++; } } } return res*res;}
方法二:动态规划法。用sum[i][j]表示以i,j为右下角对角线的正方形长度。首先初始化sum[0][i]和sum[i][0],然后有递推公式sum[i][j]=min(sum[i-1][j],sum[i][j-1],sum[i-1][j-1])+1
代码来自:http://blog.csdn.net/xudli/article/details/46371673
public class Solution { public int maximalSquare(char[][] matrix) { if(matrix==null || matrix.length==0 || matrix[0].length==0) return 0; int n = matrix.length; int m = matrix[0].length; int[][] d = new int[n][m]; int max = 0; for(int i=0; i<n; i++) { if(matrix[i][0]=='1') { d[i][0] = 1; max = 1; } } for(int j=0; j<m; j++) { if(matrix[0][j]=='1') { d[0][j] = 1; max = 1; } } for(int i=1; i<n; i++) { for(int j=1; j<m; j++) { if(matrix[i][j]=='0') d[i][j]=0; else { d[i][j] = Math.min( Math.min( d[i-1][j], d[i][j-1]), d[i-1][j-1] ) + 1; max = Math.max(max, d[i][j]); } } } return max*max; } }
0 0
- leetCode_Maximal Square
- Leetcode_maximal-rectangle
- LeetCode_Maximal Rectangle
- Square
- Square
- Square
- Square
- Square
- Square
- Square
- Square
- Square
- A Square Perfect Square
- magic square
- EM square
- theatre square
- magic square
- Square Coins
- USACO2011Open Silver Running Laps题解
- Codeforces Round #359 (Div. 2)
- CRT调试内存泄露
- leaflet学习教程 (一)
- Java加密之SHA示例
- leetCode_Maximal Square
- 块设备驱动程序
- The Key Sations_toj2189_割点
- python 嵌套list的一些小结
- 网络字节序转换
- 全子集问题(subset)
- socket 非阻塞即时通讯
- Java开发中的23种设计模式详解
- Dubbo服务启动依赖检查