题目
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。子数组 是数组的连续子序列。
示例:
!!! 注意
对于乘法,我们需要注意,负数乘以负数,会变成正数,所以解这题的时候我们需要维护两个变量,当前的最大值,以及最小值,最小值可能为负数,但没准下一步乘以一个负数,当前的最大值就变成最小值,而最小值则变成最大值了。
代码
class Solution {
public int maxProduct(int[] nums) {
int len = nums.length;
int[] maxNum = new int[len];
int[] minNum = new int[len];
int ans = nums[0];
//初始化
maxNum[0] = nums[0];
minNum[0] = nums[0];
for(int i = 1; i < len; i++){
maxNum[i] = Math.max(nums[i],Math.max(maxNum[i-1]* nums[i] , minNum[i-1] * nums[i]));
minNum[i] = Math.min(nums[i],Math.min(minNum[i-1]*nums[i],maxNum[i-1] * nums[i]));
ans = Math.max(ans,maxNum[i]);
}
return ans;
}
}