1. 程式人生 > >求連續子陣列的最大乘積

求連續子陣列的最大乘積

很多人肯定都做過求連續子陣列的最大和問題,相信大多數人都很容易將程式碼寫出來。

首先採用最簡單的暴力法,程式碼如下:

<span style="font-size:18px;">  int maxProduct(int A[], int n) {
        
       if(1==n)
        return A[0];
        int i,j;
        int sum=A[0];
        int temp;
        for(i=0;i<n;i++)
        {
            temp=A[i];
            for(j=i+1;j<n;j++)
            {
                temp=temp*A[j];
                if(temp>sum)
                    sum=temp;
            }
        }
return sum;
}</span>

相對於求連續字陣列的最大和問題,最大乘積有一些不同,因為我們都知道,陣列中存在正數,負數,零,使得最大乘積可能不是連續的遞增。

因為負數乘以負數也能得到正數,並且如果負數的絕對值大於正數,那麼得到的最大乘積就要改變。 所以我們需要在運算中需要儲存最大的乘積和最小的乘積

我們用 maxtemp  mintemp來儲存當前最大最小乘積。

程式碼如下:

<span style="font-size:18px;"> int  *maxtemp =new int[n];
        int *mintemp=new int[n];
        maxtemp[0]=A[0];
        mintemp[0]=A[0];
        int i;
        int sum=A[0];
        for(i=1;i<n;i++)
        {
            maxtemp[i]=max(A[i],max(maxtemp[i-1]*A[i],A[i]*mintemp[i-1]));
            mintemp[i]=min(A[i],min(maxtemp[i-1]*A[i],A[i]*mintemp[i-1]));
            
            if(max[i]>sum)
                sum=max[i];
        }
        delete [] maxtemp;
        delete [] mintemp;
        return sum;
    }</span>