“ 学习算法不是为了面试,而是为了感受编程的魅力!”
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
方法一:暴露破解
def test(nums)''' 注意判断nums是否为空,此处省略 '''lenNum=len(nums)ret = nums[0]for i in range(lenNum):x=1for j in range(1,lenNum):x*=nums[j]if x > ret:ret = xreturn ret
方法二:DP(动态规划)
def test(nums):''' 注意判断nums '''lenNum= len(nums)ret=nums[0]maxNum=nums[0]minNum=nums[0]for i in range(1,lenNum):end1,end2=maxNum*nums[i],minNum*nums[i]maxNum,minNum = max(end1,end2,nums[i]),min(end1,end2,nums[i])ret = max(maxNum,ret)return ret
衍生出相似的算法:
最小乘积子序列
最大和子序列
....
欢迎长按下图关注公众号小璇坨坨
十年积累倾囊相授
文章转载自小璇坨坨,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




