首页 > 代码库 > Maximum Product Subarray 最大连续乘积子集

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.

此题要求是要在一个无需的数组找出一个乘积最大的连续子数组

例如[2,3,-2,4],因为可能有负数,可以设置两个临时变量mint和maxt,mint存储遇到负数之后相乘变小的乘积,maxt用来存储大的乘积。

比如2*3=6,此时,mint = maxt = 6,当下次遇到-2时,mint = maxt = -12,此时乘积-12小于-2,则应使maxt = -2。为避免下个数还是负数,应使mint不变,若下次遇到负数,则乘积比maxt大,然后交换……

具体看代码:

 1 public class Solution { 2     public int maxProduct(int[] A) { 3         int n = A.length; 4         int mint = 1; 5         int maxt = 1; 6          7         int maxvalue = http://www.mamicode.com/A[0]; 8         for(int i =  0 ; i < n ; i++){ 9             if(A[i] == 0){10                 mint = 1;11                 maxt = 1;12                 if(maxvalue < 0)13                     maxvalue = http://www.mamicode.com/0;14             }else{15                 int curmax = maxt * A[i];16                 int curmin = mint * A[i];17                 18                 maxt = curmax > curmin ? curmax : curmin;19                 mint = curmax > curmin ? curmin : curmax;20                 21                 if(maxt < A[i])22                     maxt = A[i];23                     24                 if(mint > A[i])25                     mint = A[i];26                     27                 if(maxt > maxvalue)28                     maxvalue =http://www.mamicode.com/ maxt;29             }30         }31         32         return maxvalue;33         34     }35 }

 

Maximum Product Subarray 最大连续乘积子集