給你 n 個整數,請按從大到小的順序輸出其中前 m 大的數。
每組測試資料有兩行,第一行有兩個數 n,m(0
1000000),第二行包含 n 個各不相同,且都處於區間[-500000,500000]的整數。
對每組測試資料按從大到小的順序輸出前 m 大的數。
5 3
3 -35 92 213 -644
213 92 3
#include
int main(int argc, const
char * argv) ;
int n,m;
while(scanf("%d", &n) != eof)
for(int j = 1000000;m > 0;j --)
}printf("\n");
}return
0;}
我們容易聯想到,要輸出前 m 大的數,我們只需將其降序排序,然後輸出前 m 個數即可。那麼,讀者可能不禁會產生疑問,這不就是排序麼,而這個問題我 們在本章第一節中不是已經討論過了,為什麼這裡又再次提出來了。如果讀者有 這個疑問,你就要反問自己了:你是否忽略了什麼?我們在前幾例中並沒有著重 分析演算法的複雜度,但這不代表複雜度分析在我們解題的過程中不那麼重要,相 反複雜度分析是乙個演算法可行的前提與保證。即使本文沒有明確的分析複雜度, 讀者也要有自己估算複雜度的意識。在本例中,如果使用排序來解決該題,由於 待排序數字的數量十分龐大(1000000),即使使用時間複雜度為 o(nlogn)的 快速排序,其時間複雜度也會達到千萬數量級,而這在一秒時限內是不能被我們 所接受的,所以這裡,我們並不能使用快速排序來解決本題。
該**介紹了一種在輸入資料有如上所述的特點時,一種在時間上更加高效
的排序方法。
利用 std hash 對組合進行 hash
主要是記錄下 std hash 的用法,結合 lambda 表示式,感覺這樣挺方便的,雖然現在看起來還是挺暈 例子 leetcode49 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。class solution const array arr size t un...
利用BitMap進行排序
利用bitmap可以對某些資料進行排序,但是限制條件是必須實現知道資料的範圍,而且不能重複,類似於桶排序,但是比桶排序更加節省記憶體。原理很簡單,就是設定陣列某一位的數在bitmap中對應位為1,然後遍歷陣列就可以得到結果。這裡以100以內的乙個陣列排序為例 例如陣列 intarray 則設定bit...
利用TreeMap對map進行排序
treemap是可以根據鍵對map進行排序的,注意 是根據鍵。一般來講,鍵可以使integer或者是string,但是也可以是物件,但是該物件的實現類必須實現comparable介面。class mycompare implements comparable override public stri...