题目:
给定一个整数数组 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