package main func maxProduct(nums []int) int { length := len(nums) if length == 0 { return 0 } globalMax := nums[0] min, max := nums[0], nums[0] for i := 1; i < length; i++ { // Negtive num makes bigger num smaller & smaller num bigger if nums[i] < 0 { min, max = max, min } min = minInt(nums[i], nums[i]*min) max = maxInt(nums[i], nums[i]*max) globalMax = maxInt(max, globalMax) } return globalMax } // func main() { // println(maxProduct([]int{ // The answer: 144 // 2, -1, 6, 2, 1, -6, 0, 8, 7})) // }