和第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 ...