152. 乘积最大子数组
给你一个整数数组
nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:
1
2
3
4 > 输入: [2,3,-2,4]
> 输出: 6
> 解释: 子数组 [2,3] 有最大乘积 6。
>
示例 2:
1
2
3
4 > 输入: [-2,0,-1]
> 输出: 0
> 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
>
思路: 由于数组为正数,所以可能存在负数
,这样就不能仅仅去记录dp_max[i - 1]
而是还要记录dp_min[i - 1]
,因为负负得正
也可以使得得到的值为最大值.
状态转移方程:
dp_max[i] = max{nums[i], nums[i]*dp_max[i - 1], nums[i]* dp_min[i - 1]}
dp_min[i] = min{nums[i], nums[i]*dp_min[i - 1], nums[i]* dp_min[i - 1]}
1 | class Solution { |