題目描述
https://leetcode-cn.com/problems/maximum-product-subarray/
解
package main
func maxProduct(nums []int) int {
if len(nums) == 0 {
return 0
}
var max, min, r = nums[0], nums[0], nums[0]
for i := 1; i < len(nums); i++ {
v := nums[i]
mx, mn := max, min
max = getMax(mx*v, getMax(v, mn*v))
min = getMin(mn*v, getMin(v, mx*v))
r = getMax(r, max)
}
return r
}
func getMax(a, b int) int {
if a > b {
return a
}
return b
}
func getMin(a, b int) int {
if a < b {
return a
}
return b
}
思路
使用最大和最小兩個(gè)統(tǒng)計(jì)蔚万,每次更新最大值是比較最大和最小分別的當(dāng)前值的乘積假夺。主要難點(diǎn)還是中間那個(gè)循環(huán)!