尋找第k大數字

2021-07-25 07:16:21 字數 1887 閱讀 6863

**sicily

description

經過長時間的籌備工作,在jourk,ronny,plipala,阿長,阿沈等人的努力下,dm實驗室建立起自己的系列**,其中包括三個大板塊:dmoj首頁、dmoj論壇、dmoj部落格。

作為乙個大型的**,資料的加工處理需要用到很多演算法系統模組,通過這些模組對系統主資料庫進行修改。因此,在構建dmoj系列**的過程中,編寫了乙個龐大的資料統計系統,其中包括乙個尋找第k大數字的模組,對於乙個資料庫來說,這樣乙個模組的重要性不容置疑。但是,由於在修改**的過程中,這個模組被不慎刪掉了,dmoj找到了聰明的你,希望你能幫

dmoj

重寫這個模組。

對於輸入資料,你將按資料要求找出n個數字中的第k大數字。

關於第k大數字的解釋:對於乙個數字序列,計算該數字序列第k大數字,一種可行但效率不高的方法是,首先剔除數字序列中重複的數字,然後通過某種排序演算法,獲得剔除重複數字後的數字序列從大到小排序的數字序列,然後取從大到小排序的數字序列的第k位的數字。從另乙個角度,題目中的第k大數字即是不計入數字序列中數字重複出現的部分,對於數字重複出現的情況,應該認為該數字只出現一次。

現在請聰明的你嘗試設計一種可行且效率更高的方法來解決這個問題。

不能使用algorithm的排序函式, 這道題ta會觀賞大家**,請重新提交

不用algorithm標頭檔案,有種方法可以做到2.62s, 希望大家能想辦法做得更快!

ps:1、做了這個題以後面試遇到人家問怎麼找陣列裡面的中位數就不要再說什麼先排序然後找中間那個數了

2、這個題網上有很多解法,也有人分析每種解法的時間複雜度,有興趣了解多少就多少

3、如果你了解了多種解法,那麼請分析,這些解法分別在什麼情況下會比較好?

比如求中位數,哪種解法比較好?再比如求最大值,哪種方法比較好?

input

輸入資料一共有三行。

第一行有乙個正整數n(n<=10000000),表示一共給出多少個數字。

第二行有乙個正整數k(k<=10000000),表示要求你找出第k大數字。

第三行有n個整數,給出n個數字。對於每個整數i,均滿足-10000000<=i<=10000000。

output

輸出檔案共一行,包含乙個整數,表示n個數字中第k大數字是多少。

sample input

3

22006 2007 2008

sample output

2007

hint

不能使用algorithm的sort/qsort函式

使用快速排序:

// problem#: 19589

// submission#: 4960280

// the source code is licensed under creative commons attribution-noncommercial-sharealike 3.0 unported license

// uri:

#includeusing namespace std;

int k;

int a[10000005];

int h[20000005]=; //h陣列檢查重複或者用vectorvoid swap(int *a, int* b)

}int partion(int a, int s, int e)

} swap(&a[j+ 1], &a[e]);

return j+ 1;

} int qsort(int a, int s, int e)

int main()

}k = count - k + 1; //第k大數

cout<< qsort(a, 0, count- 1)<< endl;

}

牛客 尋找第k大數字

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。示例1 1,3,5,2,2 5,32public class findkth 遞迴尋找陣列中第k大的元素 private int find ...

SOJ 尋找第k大數字 numberk

description 經過長時間的籌備工作,在jourk,ronny,plipala,阿長,阿沈等人的努力下,dm實驗室建立起自己的系列 其中包括三個大板塊 dmoj首頁 dmoj論壇 dmoj部落格。作為乙個大型的 資料的加工處理需要用到很多演算法系統模組,通過這些模組對系統主資料庫進行修改。因...

分治演算法 尋找第k大數

問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...