第2章 數字之魅 尋找陣列中的最大值和最小值

2022-07-04 13:03:12 字數 3025 閱讀 7300

對於乙個由n個整數組成的陣列,需要比較多少次才能把最大和最小的數找出來呢?

可以把尋找陣列中的最大值和最小值看成是兩個獨立的問題,我們只要分別求出陣列的最大值和最小值即可解決問題。最直接的做法是先掃瞄一遍陣列,找出最大的數以及最小的數。這樣,我們需要比較2*(n-1)次才能找出最大的數和最小的數。**如下:

1

package

chapter2shuzizhimei.findminmax;

2/**

3* 尋找陣列中的最大值和最小值

4* 【解法一】5*

@author

dell6*

7*/8public

class

findminandmax

19 system.out.println("最小值為:"+min);

20 system.out.println("最大值為:"+max);21}

22public

static

void

main(string args) ;

24findminmax(a);25}

2627 }

程式執行結果如下:

最小值為:3最大值為:9

**如下:

1

package

chapter2shuzizhimei.findminmax;

2/**

3* 尋找陣列中的最大值和最小值

4* 【解法二】5*

@author

dell6*

7*/8public

class

findminandmax2 18}

19int min = a[1];

20int max = a[0];

21for(int i=0;i)

27 system.out.println("最小值為:"+min);

28 system.out.println("最大值為:"+max);29}

30public

static

void

main(string args) ;

32findminmax(a);33}

3435 }

程式執行結果如下:

最小值為:3最大值為:9
**如下:

1

package

chapter2shuzizhimei.findminmax;

2/**

3* 尋找陣列中的最大值和最小值

4* 【解法三】5*

@author

dell6*

7*/8public

class

findminandmax3 else

2526

}27 system.out.println("最小值為:"+min);

28 system.out.println("最大值為:"+max);29}

30public

static

void

main(string args) ;

32findminmax(a);33}

3435 }

程式執行結果如下:

最小值為:3最大值為:9

具體**如下:

1

package

chapter2shuzizhimei.findminmax;

2/**

3* 尋找陣列中的最大值和最小值

4* 【解法四】分治思想5*

@author

dell6*

7*/8public

class

findminandmax4 17}

18//

尋找陣列a中的最大值和最小值

19public

static tuple findminmax(int a, int first, int

last)

26 tuple ltuple = findminmax(a,first,first+(last-first)/2);

27 tuple rtuple = findminmax(a,first+(last-first)/2+1,last);

28int

min,max;

29if(ltuple.min

30 min =ltuple.min;

31else

32 min =rtuple.min;

33if(ltuple.max>rtuple.max)

34 max =ltuple.max;

35else

36 max =rtuple.max;

37return

newtuple(min,max);38}

39public

static

void

main(string args) ;

41 tuple t = findminmax(a,0,a.length-1);

42 system.out.println("最小值為:"+t.min);

43 system.out.println("最大值為:"+t.max);44}

4546 }

程式執行結果如下:

最小值為:3最大值為:9

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

給定乙個長度為n的整數陣列,只允許用乘法,不能用除法,計算任意 n 1 個數的組合乘積中最大的一組,並寫出演算法的時間複雜度。我們把所有可能的 n 1 個數的組合找出來,分別計算它們的乘積,並比較大小。由於總共有n個 n 1 個數的組合,總的時間複雜度為o n2 但顯然這不是最好的解法。具體 如下 ...

第2章 數字之魅 數字中的技巧2 2

問題1 求 n!末尾有多少個0。問題2 n!中二進位制表示中最低位1的位置。首先對於問題1 對於n!的末尾有多少個0這個問題。要追溯到算術基本定理 任何乙個大於1的自然數 n,都可以唯一分解成有限個質數的乘積 n p 1 a1 p 2 a2 p n an 這裡p 1質數 其諸方冪 ai 是正整數。m...

第2章 數字之魅 數字中的技巧2 1

法1 整型數觀念。二進位制中1在數中的體現,也就是當乙個數是奇數時最末位就是1。那麼我們可以將乙個數判斷是否是奇數。如果是就統計加1。並且 2 失去這一位。int count count 0 void count int num num 2 法1法2 從二進位制的角度。利用位運算。從二進位制的角度對...