給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意(n-1)個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。
我們把所有可能的(n-1)個數的組合找出來,分別計算它們的乘積,並比較大小。由於總共有n個(n-1)個數的組合,總的時間複雜度為o(n2),但顯然這不是最好的解法。
具體**如下:
1程式執行結果如下:package
chapter2shuzizhimei.maxmutiply;
2/**
3* 子陣列的最大乘積
4* 【解法一】5*
@author
dell6*
7*/8public
class
maxmutiply1
20for(i=n-2;i>=0;i--)
23long max = s[0]*t[0];
24for(i=0;i)
29return
max;30}
31public
static
void
main(string args) ;
33 system.out.println("最大乘積為:"+findmax(a));
3435}36
37 }
最大乘積為:15
為了避免溢位,不直接求乘積,而是返回要剔除的那個陣列元素,**如下:
1程式執行結果如下:package
chapter2shuzizhimei.maxmutiply;23
/**4
* 子陣列的最大乘積
5* 【解法二】6*
@author
dell7*
8*/9public
class
maxmutiply2
24else
if(a[i]==0)
27else34}
35if(zero>=2)
39if(zero==1)
44else48}
49if(negative%2!=0)
53else57}
58public
static
void
main(string args) ;
60findmax(a);
6162}63
64 }
乘積最大時應該剔除的元素為:0
子陣列的最大乘積
子陣列的最大乘積 給定乙個長度為 n的整數陣列,只允許用乘法,不能用除法,計算任意 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。我們把所有可能的 n 1 個數的組合找出來,分別計算它們的乘積,並比 較大小。由於總共有n個 n 1 個數的組合,總的時間複雜度為o n2 但顯然這不是最...
子陣列的最大乘積
給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。注意,因為陣列中數可正可負,通過排序去除最小的顯然不能滿足要求,如乘積為負,你去除最小的負值顯然不對,應該去除最大的負數值 解法一 可以通過 空間換時間 策略。從陣列兩邊計算...
子陣列的最大乘積
程式設計之美 2.13 問題 給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。解法一 把所有n 1個數的組合找出來,分別計算乘積,比較大小。o n 2 int maxsubproducti int a,int n for j ...