- 1 func maxProduct(nums []int) int {
- 2 size := len(nums)
- 3 if size == 1 {
- 4 return nums[0]
- 5 }
- 6
- 7 maxRes, curMax, curMin := nums[0], nums[0], nums[0]
- 8 for i := 1; i < size; i++ {
- 9 if nums[i] < 0 {
- 10 curMax, curMin = curMin, curMax
- 11 }
- 12
- 13 curMax = max(curMax * nums[i], nums[i])
- 14 curMin = min(curMin * nums[i], nums[i])
- 15 maxRes = max(curMax, maxRes)
- 16 }
- 17
- 18 return maxRes
- 19 }
- 20
- 21 func max(a, b int) int {
- 22 if a > b {
- 23 return a
- 24 }
- 25 return b
- 26 }
- 27
- 28 func min(a, b int) int {
- 29 if a < b {
- 30 return a
- 31 }
- 32 return b
- 33 }