152. Maximum Product Subarray

来源:互联网 发布:矩阵奇异值分解算法 编辑:程序博客网 时间:2024/06/15 14:06

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


0 0
原创粉丝点击