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 |
---|