// 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