Question:
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array [2,3,-2,4]
,
the contiguous subarray [2,3]
has the largest product = 6
.
以为和maximum subarray 一样~但是乘法和加法差了很多,正负 负的可能逆转
public class Solution {
public int maxProduct(int[] nums) {
int n=nums.length;
int max=nums[0];
int min=nums[0];
int r=nums[0];
for(int i=1;i<=n-1;i++)
{
if(nums[i]<0)
{
int tmp=max;
max=min;
min=tmp;
}
max=Math.max(nums[i]*max,nums[i]);
min=Math.max(nums[i]*min,nums[i]);
r=Math.max(r,max);
}
return r;
}
}
上面那是错的。。。 //不可以单纯的像上面那么做,-2,3,-4时就会出问题 参考了discussion
public class Solution {
public int maxProduct(int[] nums) {
if(nums.length==0)
return 0;
int maxherepre=nums[0];
int minherepre=nums[0];
int maxsofar=nums[0];
int maxhere,minhere;
int n=nums.length;
for(int i=1;i<=n-1;i++)
{
maxhere=Math.max(maxherepre*nums[i],Math.max(minherepre*nums[i],nums[i]));
minhere=Math.min(maxherepre*nums[i],Math.min(minherepre*nums[i],nums[i]));
maxsofar=Math.max(maxhere,maxsofar);
maxherepre=maxhere;
minherepre=minhere;
}
return maxsofar;
}
}