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
.
Subscribe to see which companies asked this question.
这个问题如果该数组中有偶数个负数,没有0,那么就是全部数相乘最大。如果有奇数个负数,没有0,那么最大的子集可能是去掉最左边那个负数,或者最右边那个负数。也就是比较两种情况那个子集乘积大取哪个。
Forward*=nums[i];
Back*=nums[numsSize-1-i];
Larger=(Forward>Back)? Forward:Back;
GlobalMax=(GlobalMax>Larger)?GlobalMax:Larger;
如果中间有0,那么重新计数。
if(Forward==0) Forward=1;
if(Back==0) Back=1;
完整程序:
int maxProduct(int* nums, int numsSize) {
int Forward=1;
int Back=1;
int GlobalMax=nums[0];
int Larger=1;
for(int i=0;i<numsSize;i++){
Forward*=nums[i];
Back*=nums[numsSize-1-i];
Larger=(Forward>Back)? Forward:Back;
GlobalMax=(GlobalMax>Larger)?GlobalMax:Larger;
if(Forward==0) Forward=1;
if(Back==0) Back=1;
};
return GlobalMax;
}