35 lines
856 B
Go
35 lines
856 B
Go
// Package q1594 implements a solution for https://leetcode.com/problems/maximum-non-negative-product-in-a-matrix/
|
|
package q1594
|
|
|
|
const MOD = 1e9 + 7
|
|
|
|
func maxProductPath(grid [][]int) int {
|
|
buf := make([][2]int, len(grid[0]))
|
|
|
|
buf[0] = [2]int{grid[0][0], grid[0][0]}
|
|
for c := 1; c < len(grid[0]); c++ {
|
|
num := grid[0][c]
|
|
n1, n2 := num*buf[c-1][0], num*buf[c-1][1]
|
|
buf[c] = [2]int{max(n1, n2), min(n1, n2)}
|
|
}
|
|
|
|
for r := 1; r < len(grid); r++ {
|
|
num := grid[r][0]
|
|
n1, n2 := num*buf[0][0], num*buf[0][1]
|
|
buf[0] = [2]int{max(n1, n2), min(n1, n2)}
|
|
|
|
for c := 1; c < len(grid[0]); c++ {
|
|
num := grid[r][c]
|
|
n1, n2 := num*buf[c][0], num*buf[c][1]
|
|
n3, n4 := num*buf[c-1][0], num*buf[c-1][1]
|
|
buf[c] = [2]int{
|
|
max(n1, n2, n3, n4),
|
|
min(n1, n2, n3, n4),
|
|
}
|
|
}
|
|
}
|
|
|
|
return max(-1, buf[len(buf)-1][0]%MOD)
|
|
}
|
|
|
|
var _ = maxProductPath
|