152. Maximum Product Subarray

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章