Skip to content

Commit c4c9947

Browse files
authored
Create maximum-non-negative-product-in-a-matrix.py
1 parent 5853480 commit c4c9947

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Time: O(m * n)
2+
# Space: O(n)
3+
4+
# dp with rolling window
5+
class Solution(object):
6+
def maxProductPath(self, grid):
7+
"""
8+
:type grid: List[List[int]]
9+
:rtype: int
10+
"""
11+
MOD = 10**9+7
12+
max_dp = [[0]*len(grid[0]) for _ in xrange(2)]
13+
min_dp = [[0]*len(grid[0]) for _ in xrange(2)]
14+
for i in xrange(len(grid)):
15+
for j in xrange(len(grid[i])):
16+
if i == 0 and j == 0:
17+
max_dp[i%2][j] = min_dp[i%2][j] = grid[i][j]
18+
continue
19+
curr_max = max(max_dp[(i-1)%2][j] if i > 0 else max_dp[i%2][j-1],
20+
max_dp[i%2][j-1] if j > 0 else max_dp[(i-1)%2][j])
21+
curr_min = min(min_dp[(i-1)%2][j] if i > 0 else min_dp[i%2][j-1],
22+
min_dp[i%2][j-1] if j > 0 else min_dp[(i-1)%2][j])
23+
if grid[i][j] < 0:
24+
curr_max, curr_min = curr_min, curr_max
25+
max_dp[i%2][j] = curr_max*grid[i][j]
26+
min_dp[i%2][j] = curr_min*grid[i][j]
27+
return max_dp[(len(grid)-1)%2][-1]%MOD if max_dp[(len(grid)-1)%2][-1] >= 0 else -1

0 commit comments

Comments
 (0)