5.18——152. 乘积最大子数组

152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
 
 
1.解题思路
53. 最大子序和)解法一致,不同的是“负负得正”。当遍历到数组中的负数时,我们希望以它前一个位置结尾的某个段的积也是个负数,这样就可以负负得正,并且我们希望这个积尽可能「负得更多」,即尽可能小。 所以我们得到了一个结论:当前位置的最优解未必是由前一个位置的最优解转移得到的。 于是这里我们可以创建一个参照数组,它表示以第 i 个元素结尾的最小子数组的乘积。
递归式:
    MAX (i)=max(nums[i], num[i]*MAX[i-1], nums[i]*MIN[i-1])
    MIN(i)=min(nums[i], num[i]*MAX[i-1], nums[i]*MIN[i-1])
 
2.源码

猜你喜欢

转载自www.cnblogs.com/xiaoqichaoren/p/12951906.html