求連續子陣列的最大乘積
阿新 • • 發佈:2019-01-05
很多人肯定都做過求連續子陣列的最大和問題,相信大多數人都很容易將程式碼寫出來。
首先採用最簡單的暴力法,程式碼如下:
<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>