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;
}