LeetCode152:乘积最大子序列

这是一篇关于LeetCode第152题的解题文章,主要探讨如何使用动态规划找到一个整数数组中乘积最大的连续子序列。文章通过示例解释问题,并给出Python3实现的代码,最后展示运行结果。动态规划算法确保了问题的O(n)时间复杂度解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode152: 乘积最大子序列

题目

给定一个整数数组nums,找出一个序列中乘积最大的连续子序列(该序列中至少包含一个数)。

示例1:

输入:[2, 3, -2, 4]
输出:6
解释:子数组 [2, 3] 有最大乘积 6

示例2:

输入:[-2, 0 , -1]
输出:0
解释:结果不能为2,因为[-2, -1]不是子数组

思路

1.若数组只有一个元素,那么输出结果为此元素。

输入:[1]
输出:1
最大序列值:1
最小序列值:1

2.若在此数组后添加元素2,则新的最大序列值可能为原最小值×新值,也有可能为原最大值×新值,也有可能是新添加的值,为了后续计算,需要保留更新后的最大值和最小值,因此求解流程为:

输入:[1, -2]
1. [1] 返回的最大值序列乘积res = 1,其中最大序列值nums_max = 1,最小序列值 nums_min = 1
2. 由于添加了新的元素,对于新的数组:
    nums_max = max(nums_max * -2, nums_min * -2, -2) = -2,
    nums_min = min(nums_min * -2, nums_max * -2, -2) = -2,
    res = max(res, nums_max) = 1
输出:1
最大序列值:1
最小序列值:-2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值