題目:
給定一個整數數組 nums ,找出一個序列中乘積最大的連續子序列(該序列至少包含一個數)。
示例 1:
輸入: [2,3,-2,4] 輸出: 6 解釋: 子數組 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1] 輸出: 0 解釋: 結果不能為 2, 因為 [-2,-1] 不是子數組。
解題思路:因為是整數數組,所以不考慮小數,只考慮負數、正數和0。當遇到0則對應下一個新的序列要開始;遇到負數,當前最大值會變成最小值。
代碼實現比較簡單:
func maxProduct(nums []int) int {
if nums==nil || len(nums)==0{
return 0
}
ret:=nums[0]
currentMax:=1
currentMin:=1
for i:=0;i
if nums[i]<0{//遇到負數,最大數變最小數,最小變最大
currentMax,currentMin=currentMin,currentMax
}
currentMax=max(currentMax*nums[i],nums[i])
currentMin=min(currentMin*nums[i],nums[i])
ret=max(currentMax,ret)
}
return ret
}
//求大值
func max(a,b int)int{
if a>b{
return a
}
return b
}
//求小值
func min(a,b int)int{
if a>b{
return b
}
return a
}
執行用時4ms
關鍵字: return 數組 currentMax