Skip to content

Commit 4346965

Browse files
authored
Update find-a-good-subset-of-the-matrix.py
1 parent bb0c57e commit 4346965

File tree

1 file changed

+4
-30
lines changed

1 file changed

+4
-30
lines changed
+4-30
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,8 @@
11
# Time: O(m * 2^n)
22
# Space: O(2^n)
33

4-
# bitmasks, constructive algorithms, greedy, submask enumeration
5-
class Solution(object):
6-
def goodSubsetofBinaryMatrix(self, grid):
7-
"""
8-
:type grid: List[List[int]]
9-
:rtype: List[int]
10-
"""
11-
lookup = {}
12-
for i in xrange(len(grid)):
13-
mask = reduce(lambda mask, j: mask|(grid[i][j]<<j), xrange(len(grid[0])), 0)
14-
if not mask:
15-
return [i]
16-
mask2 = ((1<<len(grid[0]))-1)^mask
17-
submask = mask2 # submask enumeration
18-
while submask > 0:
19-
if submask in lookup:
20-
return [lookup[submask], i]
21-
submask = (submask-1)&mask2
22-
lookup[mask] = i
23-
return []
24-
25-
26-
# Time: O(m * 2^n)
27-
# Space: O(2^n)
284
# bitmasks, constructive algorithms, greedy
29-
class Solution2(object):
5+
class Solution(object):
306
def goodSubsetofBinaryMatrix(self, grid):
317
"""
328
:type grid: List[List[int]]
@@ -37,10 +13,8 @@ def goodSubsetofBinaryMatrix(self, grid):
3713
mask = reduce(lambda mask, j: mask|(grid[i][j]<<j), xrange(len(grid[0])), 0)
3814
if not mask:
3915
return [i]
40-
for mask2 in xrange(1, 1<<len(grid[0])):
41-
if mask&mask2:
42-
continue
43-
if mask2 in lookup:
44-
return [lookup[mask2], i]
16+
for mask2, j in lookup.iteritems():
17+
if mask&mask2 == 0:
18+
return [j, i]
4519
lookup[mask] = i
4620
return []

0 commit comments

Comments
 (0)