题目传送:https://leetcode.cn/problems/maximum-product-subarray/
运行效率;
代码如下:
class Solution {
public int maxProduct(int[] nums) {
//用于记录以i个位置元素结尾的最大乘积
int[] dpMax = new int[nums.length];
//用于记录以i个位置元素结尾的最小乘积
int[] dpMin = new int[nums.length];
//初始化dpMax[0],dpMin[0]
dpMax[0] = nums[0];
dpMin[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
//因为dpMin[i-1]可能为0,所以要把nums[i]也要进行比较
dpMax[i] = Math.max(Math.max(dpMin[i - 1] * nums[i], dpMax[i - 1] * nums[i]), nums[i]);
//因为dpMax[i-1]可能为0,所以要把nums[i]也要进行比较
dpMin[i] = Math.min(Math.min(dpMin[i - 1] * nums[i], dpMax[i - 1] * nums[i]), nums[i]);
}
int max = Integer.MIN_VALUE;
for (int i = 0; i < dpMax.length; i++) {
max = Math.max(max, dpMax[i]);
}
return max;
}
}