力扣-152.乘积最大子数组
152.乘积最大子数组
class Solution {public int maxProduct(int[] nums) {int[] dpMax = new int[nums.length]; //包括nums[i]的乘积最大值int[] dpMin = new int[nums.length]; //包括nums[i]的乘积最小值int res = nums[0];dpMax[0] = nums[0];dpMin[0] = nums[0];for (int i = 1; i < nums.length; i++) {if (nums[i] >= 0) {dpMax[i] = Math.max(dpMax[i - 1] * nums[i], nums[i]);dpMin[i] = Math.min(dpMin[i - 1] * nums[i], nums[i]);} else {dpMax[i] = Math.max(dpMin[i - 1] * nums[i], nums[i]);dpMin[i] = Math.min(dpMax[i - 1] * nums[i], nums[i]);}res = Math.max(res, dpMax[i]);}return res;}
}
小结:因为可能有负数出现,可能让最小的变成最大的,需要额外记录当前最小值。