求亂序陣列中第K大的值

2021-08-07 10:39:45 字數 480 閱讀 2168

投機取巧用函式進行處理,沒有從演算法角度思考;

編譯成功60%,還得再想想哪些案例沒有實現

#include

#include

#include

using namespace std;

int main()

//輸入為首行亂序數列,第二行為k值

int num;

vectorv1;

while(cin>>num)

int k;

cin>>k;

int len=v1.size();

if(k>len)

return 0;

sort(v1.begin(),v1.end());

//inverse(v1.begin(),v1.end());

unique(v1.begin(),v1.end());

cout<<*(v1.end()-k)<}

亂序陣列中第k大的數(順序統計量)

該問題是順序統計量中十分經典的問題。使用快排中的分割槽法,將第k大的數排序。若雙向掃瞄分割槽加上三點中值法或絕對中值法,可以保證在 o n 時間裡找出第k大的數。補充 可以直接使用c stl中的nth element函式 一定注意使用形式!1 2 第k大的數 3 4int part int arr,...

3 6 最快效率求出亂序陣列中第k小的數

以盡量高的效率求乙個亂序陣列中第k小的元素 演算法1用快排先將陣列排序,然後直接找第k個元素,時間複雜度為o nlgn 演算法2思路用分割槽查詢的思想,同樣有點排序的感覺,畢竟分割槽就是將小於主元的元素放左邊,大於主元的元素放右邊。與排序完再查詢不同的是 對於一次遞迴呼叫來說 比如原來陣列10個元素...

單峰陣列求第k大演算法

單峰陣列實際上可以看成兩個有序的陣列,這個問題就轉變成了兩個有序陣列求第k大。容易想到的演算法是對這兩個陣列進行歸併,生成乙個新的有序陣列,求出第k大之後就可以立刻停止,複雜度是o k 的。但是還有更優的演算法,可以使用分治的思想 實際上也是一種二分 來計算。對於兩個有序的陣列a和b,取出他們第k ...