Leetcode 152、乘积最大子数组
动态规划
min数组存储到目前位置最小的乘积,max数组存储到目前位置最大的乘积
- 遍历nums数组,如果当前位置小于0
min[i] = Math.min(max[i - 1] * nums[i], nums[i]);
max[i] = Math.max(min[i - 1] * nums[i], nums[i]);
- 遍历nums数组,如果当前位置大于等于0
min[i] = Math.min(min[i - 1] * nums[i], nums[i]);
max[i] = Math.max(max[i - 1] * nums[i], nums[i]);
- 完整代码
class Solution {
public int maxProduct(int[] nums) {
int len = nums.length;
int[] min = new int[len];
int[] max = new int[len];
min[0] = nums[0];
max[0] = nums[0];
int result = max[0];
for(int i = 1; i < len; i++) {
if(nums[i] < 0) {
min[i] = Math.min(max[i - 1] * nums[i], nums[i]);
max[i] = Math.max(min[i - 1] * nums[i], nums[i]);
}else{
min[i] = Math.min(min[i - 1] * nums[i], nums[i]);
max[i] = Math.max(max[i - 1] * nums[i], nums[i]);
}
result = Math.max(result, max[i]);
}
return result;
}
}