求最大连续子序列乘积! 使用到动态规划,dp1[i]存i之前序列的连续最大子序列乘积,dp2[i]存i之前序列的连续最大子序列乘积
考虑到负数x负数=正数,所以存dp2[i]。
public int maxProduct(int[] nums) {
int len=nums.length;
int dp1[]=new int[len];
int dp2[]=new int[len];
dp1[0]=nums[0];
dp2[0]=nums[0];
for(int i=1;i<nums.length;i++){
dp1[i]=Math.max(nums[i],Math.max(dp1[i-1]*nums[i],dp2[i-1]*nums[i]));
dp2[i]=Math.min(nums[i],Math.min(dp1[i-1]*nums[i],dp2[i-1]*nums[i]));
}
int ans=nums[0];
for(int i=1;i<nums.length;i++){
ans=Math.max(ans,dp1[i]);
}
return ans;
}