Go實現算法:乘積最大子序列(LeetCode)

題目:

給定一個整數數組 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

Go實現算法:乘積最大子序列(LeetCode)


分享到:


相關文章: