陣列第K大

2021-10-23 21:57:29 字數 611 閱讀 5393

和第k小剛好相反

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。

給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。

測試樣例:

[1,3,5,2,2],5,3

返回:2

先排序+快排+二分

第k大,則說明是第n-k+1小

目的下標為n-k

根據快排中軸下標,二分法調整

int

partion

(vector<

int> a,

int low,

int high)

if(lowwhile

(low<= key)

if(low} a[low]

= key;

return low;

}int

findkth

(vector<

int> a,

int n,

int k)

else

}return a[index]

;}

求陣列第K大的數

問題 有乙個大小為n的陣列a 0,1,2,n 1 求其中第k大的數。我們先分析原問題 有乙個大小為 n的陣列a 0,1,2,n 1 求其中第k大的數。我們先取特例,令k 1,那麼就是取最大的數,只要掃瞄一遍陣列就可以確定該值,如果k 2,則掃瞄兩邊陣列就可以確定第二大的數,依此類推下去,時間複雜度是...

陣列中第k大的數

方法 有兩種。參見 第一種 使用排序 快速排序 將陣列排序後,第k大的數就在第k個位置上。演算法複雜度 o n logn 第二種 類似快速排序的變種。通過二分的思想,找到第k大的數字,而不必對整個陣列排序。從陣列中隨機選乙個數t,通過讓這個數和其它數比較,我們可以將整個陣列分成了兩部分並且滿足,在將...

單峰陣列求第k大演算法

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