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


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