res := nums[0] for i := 1; i < len(nums); i++ { maxF[i] = max(maxF[i-1]*nums[i], max(minF[i-1]*nums[i], nums[i]) ) minF[i] = min(maxF[i-1]*nums[i], min(minF[i-1]*nums[i], nums[i]) ) res = max(res, maxF[i]) } return res }
同时发现maxF[i]和minF[i]只依赖于 i-1 的结果,可以使用滚动数组来压缩空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14
funcmaxProduct(nums []int)int {
maxF := nums[0] minF := nums[0]
res := nums[0] for i := 1; i < len(nums); i++ { t := maxF maxF = max(maxF*nums[i], max(minF*nums[i], nums[i]) ) minF = min(t*nums[i], min(minF*nums[i], nums[i]) ) res = max(res, maxF) } return res }