因为有负数和0的存在,使问题变得复杂了不少。
用DP来做,而且要用两个dp数组,其中
(1)f[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最大子数组乘积,
(2)g[i]表示子数组[0, i]范围内并且一定包含nums[i]数字的最小子数组乘积,
(3)初始化时f[0]和g[0]都初始化为nums[0],其余都初始化为0。
(4)那么从数组的第二个数字开始遍历,那么此时的最大值和最小值只会在这三个数字之间产生,即f[i-1]*nums[i],g[i-1]*nums[i],和nums[i]。所以我们用三者中的最大值来更新f[i],用最小值来更新g[i],
(5)然后用f[i]来更新结果res即可,由于最终的结果不一定会包括nums[n-1]这个数字,所以f[n-1]不一定是最终解,不断更新的结果res才是。
152. 乘积最大子序列
最新推荐文章于 2022-06-06 21:19:58 发布