LeetCode Maximum Product Subarray 最大子序列积

 

 

题意:给一个size大于0的序列,求最大的连续子序列之积。(有正数,负数,0)

思路:正确分析这三种数。0把不同的可能为答案的子序列给隔开了,所以其实可以以0为分隔线将他们拆成多个序列来进行求积,这样就没有0了。

  接着是负数,负数如果遇到一个负数,可能反而比那个正数要大,所以正负数都要保存,遍历一次即可。在奇数个负数时,其实可能的只有2种:(1)包含最前面一个负数的序列(2)包含最后面一个负数的序列(当然不包含最前面1个,同理(1)也是)。

 

 

LeetCode Maximum Product Subarray 最大子序列积
 1 class Solution {

 2 public:

 3     int maxProduct(vector<int>& nums) {

 4         int a=1, b=1, res=nums[0];

 5         for(int i=0; i<nums.size(); i++)

 6         {

 7             int t=a;

 8             a=max(b*nums[i],a*nums[i]); //a保存大的

 9             b=min(t*nums[i],b*nums[i]); //b保存小的

10             res=max(res, a);

11             //if(a<=0)    a=1;    //必须保证a大于0

12             if(b>=0)    b=1;    //必须保证b小于0。为了不改变原值,只能为1。

13         }

14         return res;

15     }

16 };
AC代码

 

你可能感兴趣的:(LeetCode)