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
.
public int maxProduct(int[] nums) {
int r=nums[0], n=nums.length;
for(int i=1,imax=r,imin=r;i<n;i++){
if(nums[i]<0){
int temp = imin;
imin = imax;
imax = temp;
}
imax = Math.max(nums[i], nums[i]*imax);
imin = Math.min(nums[i], nums[i]*imin);
r = Math.max(r,imax);
}
return r;
}
总结:其实和最大和子序列那道题是一样的,只是这里要考虑正负的问题。技巧在于若遇到负数,将max和min交换。