> 技术文档 > 力扣-152.乘积最大子数组

力扣-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; }}

小结:因为可能有负数出现,可能让最小的变成最大的,需要额外记录当前最小值。