第2章 數字之魅 子陣列的最大乘積

2021-09-07 00:22:17 字數 1392 閱讀 6285

給定乙個長度為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 ...