Skip to content

Commit d05ce66

Browse files
committed
Update maximal-square.py
1 parent 02fcac2 commit d05ce66

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

Python/maximal-square.py

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Time: O(n^2)
2-
# Space: O(n^2)
2+
# Space: O(n)
33
#
44
# Given a 2D binary matrix filled with 0's and 1's,
55
# find the largest square containing all 1's and return its area.
@@ -13,7 +13,80 @@
1313
# Return 4.
1414
#
1515

16+
# DP with sliding window.
1617
class Solution:
18+
# @param {character[][]} matrix
19+
# @return {integer}
20+
def maximalSquare(self, matrix):
21+
if not matrix:
22+
return 0
23+
24+
m, n = len(matrix), len(matrix[0])
25+
size = [[0 for j in xrange(n)] for i in xrange(2)]
26+
max_size = 0
27+
28+
for j in xrange(n):
29+
if matrix[0][j] == '1':
30+
size[0][j] = 1
31+
max_size = max(max_size, size[0][j])
32+
33+
for i in xrange(1, m):
34+
if matrix[i][0] == '1':
35+
size[i % 2][0] = 1
36+
else:
37+
size[i % 2][0] = 0
38+
for j in xrange(1, n):
39+
if matrix[i][j] == '1':
40+
size[i % 2][j] = min(size[i % 2][j - 1], \
41+
size[(i - 1) % 2][j], \
42+
size[(i - 1) % 2][j - 1]) + 1
43+
max_size = max(max_size, size[i % 2][j])
44+
else:
45+
size[i % 2][j] = 0
46+
47+
return max_size * max_size
48+
49+
50+
# Time: O(n^2)
51+
# Space: O(n^2)
52+
# DP.
53+
class Solution2:
54+
# @param {character[][]} matrix
55+
# @return {integer}
56+
def maximalSquare(self, matrix):
57+
if not matrix:
58+
return 0
59+
60+
m, n = len(matrix), len(matrix[0])
61+
size = [[0 for j in xrange(n)] for i in xrange(m)]
62+
max_size = 0
63+
64+
for j in xrange(n):
65+
if matrix[0][j] == '1':
66+
size[0][j] = 1
67+
max_size = max(max_size, size[0][j])
68+
69+
for i in xrange(1, m):
70+
if matrix[i][0] == '1':
71+
size[i][0] = 1
72+
else:
73+
size[i][0] = 0
74+
for j in xrange(1, n):
75+
if matrix[i][j] == '1':
76+
size[i][j] = min(size[i][j - 1], \
77+
size[i - 1][j], \
78+
size[i - 1][j - 1]) + 1
79+
max_size = max(max_size, size[i][j])
80+
else:
81+
size[i][j] = 0
82+
83+
return max_size * max_size
84+
85+
86+
# Time: O(n^2)
87+
# Space: O(n^2)
88+
# DP.
89+
class Solution3:
1790
# @param {character[][]} matrix
1891
# @return {integer}
1992
def maximalSquare(self, matrix):

0 commit comments

Comments
 (0)