對於乙個由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 從二進位制的角度。利用位運算。從二進位制的角度對...