給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。
第一行包含乙個整數n,表示陣列的大小。n < 100000。
第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過100000000。
第三行包含乙個整數k。k < n。
從大到小輸出前k大的數,每個數一行。
104 5 6 9 8 7 1 2 3 059
8765
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8
9using
namespace
std;
1011
int a[100010
],n,k;
1213
int comp(int a,int
b)14
1718
intmain()
1925 cin>>k;
26 sort(a+1,a+n+1
,comp);
27for(int i=1; i<=k; i++)
28cout<31return0;
32 }
前k大的數
取前 k 個數,並取出最小值 mi k min k,n 遍歷 第 k 1 n的數,與 mi k 比較。若小於 mi k 遍歷下乙個。若大於 mi k 放入該值,並移除mi k 後,再次取出最小值 mi k min k,n 時間複雜度 o n k 1.將資料分成三個區間 1 k 1,k m,m 1 n...
第k大的數,前k大的數
1 排序後去出前k個,o n log n 如果k2 o nlog k 快排把數分為了兩個部分,所以考慮兩個情況,如果大的部分的個數 k,說明只要繼續在大的部分找就可以了,如果大的部分的個數3 o nlog maxv minv delta 平均為o nlogn 轉化為找第k個,假設最大的數為maxv,...
尋找前k大的數
input 輸入有多個測試用例,每個測試用例是兩行 第1行是兩個整數n和k,中間用空格隔開 n k 第2行有n個整數,每兩個數字中間用空格隔開 輸入以eof結束 output 對於每乙個測試用例,輸出一行,k個整數,就是它的前k大的整數,按照降序排列輸出,每兩個數字之間用空格隔開,最後乙個數字後面沒...