n
個元素中選最大最小
問題描述:從n
個元素中,選出最大元素和最小元素。分析複雜度。
方法:方法有三種。
方法一:
最笨的方法,迴圈一次找出最大的算素。再迴圈一下找到最小的。這裡2
次迴圈可以放在一起,作為小小的優化。比較次數:2* (n – 1) = 2n – 2。
**:
void select_max_min_1(int *a,int n,int &max,int &min)
else
for(i=2; ia[kmax]) kmax=i;
if(a[i]
方法三:
每相鄰2
個元素比較,較大的放後面,較小的放前面。在較大的元素中,找最大的。在較小的元素中找最小的。
odd:o((3n-3)/2) n
為奇數
even:o(3n-4)/2) n
為偶數
**:
///這裡注意序號的關係,其餘都很好理解。
void select_max_min_3(int *a,int n,int &max,int &min)
}for(i=3; ia[kmax]) kmax=i;
if(a[i-1]a[n-1]) kmin=n-1;
max=a[kmax];
min=a[kmin];
}else ///偶數
}for(i=3; ia[kmax]) kmax=i;
if(a[i-1]分析: n
為偶數好分析,就先說偶數情況。 n
為偶數時,相鄰元素比較n/2
次,在每個n/2
個元素中分別找最大最小,2*
(n/2-1)。
共計:n / 2+ 2 *
(n/ 2 – 1
) =3n/2 – 2。
n為奇數時,n-1
為偶數,用偶數方法得出n-1
個元素中的最大最小,帶入上面的式子。3(n-1) / 2 – 2
。剩下乙個元素分別與得出的最大最小比較,得出最終的最大最小值。
共計:3(n-1 )/ 2 – 2 + 2 = (3n – 3 ) / 2。
在N個元素中選取前M個元素
import org.junit.test public class solution int arr maxarr arr,3 for int i 0 i 5 i 問題 在n個元素中選取前m個元素 思路 1 建立長度為m的陣列,作為最小堆 或則arr 0,m 1 構建小頂堆 3 先往最小堆中存入一...
找到最大或最小的N個元素
在某個集合中找出 最大或最小的n個元素 heapq模組的nsmallest 和 nlargest是我們所需要的。如果只是找最大和最小max min更適合我們 更快 import heapq portfolio 可以接受key值 cheap heapq.nsmallest 3,portfolio,ke...
Python查詢最大或最小的 N 個元素
本文為python cookbook第三版1.4的內容 怎樣從乙個集合中獲得最大或者最小的 n 個元素列表?heapq 模組有兩個函式 nlargest 和nsmallest 可以完美解決這個問題。import heapq nums 1,8,2,23,7,4,18,23,42,37,2 print ...