Skip to content

Commit bb0c57e

Browse files
authored
Create find-a-good-subset-of-the-matrix.py
1 parent 014a84e commit bb0c57e

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Time: O(m * 2^n)
2+
# Space: O(2^n)
3+
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)
28+
# bitmasks, constructive algorithms, greedy
29+
class Solution2(object):
30+
def goodSubsetofBinaryMatrix(self, grid):
31+
"""
32+
:type grid: List[List[int]]
33+
:rtype: List[int]
34+
"""
35+
lookup = {}
36+
for i in xrange(len(grid)):
37+
mask = reduce(lambda mask, j: mask|(grid[i][j]<<j), xrange(len(grid[0])), 0)
38+
if not mask:
39+
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]
45+
lookup[mask] = i
46+
return []

0 commit comments

Comments
 (0)