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 = 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 = 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 = maxt;
29             }
30         }
31         
32         return maxvalue;
33         
34     }
35 }

 

posted @ 2014-10-21 21:07  非著名程序师  阅读(178)  评论(0编辑  收藏