forked from srishilesh/Data-Structure-and-Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path221_Maximal_Square
66 lines (63 loc) · 2.12 KB
/
221_Maximal_Square
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// https://leetcode.com/problems/maximal-square/
// DYNAMIC PROGRAMMING APPROACH
class Solution {
public int maximalSquare(char[][] matrix){
int rows = matrix.length;
int cols = rows>0?matrix[0].length:0;
int dp[][] = new int[rows+1][cols+1];
int maxsofar = 0;
for(int i=1;i<=rows;i++)
{
for(int j=1;j<=cols;j++)
{
if(matrix[i-1][j-1]=='1')
{
dp[i][j] = Math.min(((int)Math.min(dp[i][j-1],dp[i-1][j-1])),dp[i-1][j])+1;
if(maxsofar<dp[i][j])
maxsofar = dp[i][j];
}
}
}
return maxsofar*maxsofar;
}
}
// BRUTE FORCE APPROACH
// public int maximalSquare(char[][] matrix) {
// int maxsqlen = 0;
// int rows = matrix.length;int cols = rows>0?matrix[0].length:0;
// for(int i=0;i<rows;i++)
// {
// for(int j=0;j<cols;j++)
// {
// if(matrix[i][j]=='1')
// {
// int sqlen = 1;
// boolean flag = true;
// while(sqlen+i<rows && sqlen+j<cols && flag)
// {
// for(int k=j;k<=j+sqlen;k++)
// {
// if(matrix[i+sqlen][k]=='0'){
// flag = false;
// break;
// }
// }
// for(int k=i;k<=i+sqlen;k++)
// {
// if(matrix[k][j+sqlen]=='0')
// {
// flag = false;
// break;
// }
// }
// if(flag)
// sqlen++;
// }
// if(maxsqlen<sqlen)
// maxsqlen = sqlen;
// }
// }
// }
// return maxsqlen*maxsqlen;
// }
// }