牛客NC88 尋找第K大

2021-10-24 07:18:26 字數 929 閱讀 4083

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

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

測試樣例:

[1,3,5,2,2],5,3
返回:2
1.若不按快排思路,用最大堆實現,建堆複雜度o(n),插入複雜度o(logn),總共複雜度o(nlogn)

class finder 

for(int i = 0; i < k - 1; ++i)

return q.top();

}};

2.快排思想,先找主元,每次把,排完主元位置,判斷主元位置與n-k大小(公升序排序),若主元位置與n-k相等則直接返回該位置,若位置小於n-k,則排序主元右側,位置大於n-k則排序主元左側。

時間複雜度:第一次分割槽,查詢了 n 個元素,第二次查詢了 n/2 個元素,依次類推,最後區間縮小到 1,複雜度為 n+n/2 + n/4 + ....+1 為o(n)

class finder 

int findpivot(vector&a, int left, int right)

int quick_sort(vector&a, int left, int right, int k)

swap(a[i], a[right - 1]);

if(i == a.size()- k)

return i;

else if(i > a.size()- k)

return quick_sort(a, left, i - 1, k);

else

return quick_sort(a, i + 1, right, k);

}else if(left == right - 1)

}};

牛客網刷題 尋找第K大

有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。給定乙個整數陣列a,同時給定它的大小n和要找的k k在1到n之間 請返回第k大的數,保證答案存在。輸入描述 輸入乙個陣列 陣列長度 k大 輸出描述 輸出k大座標 輸入 1,3,5,2,2 5,3 輸出 2本題與之前的最小的k個數思路相類似...

牛客 尋找第k大數字

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

牛客 第k小數 線性尋找第 k 小數

題目大意 給出長度為 n 的數列 a 要求找到第 k 小的數 題目分析 因為資料給的足夠大,所以約束就是必須線性完成操作,stl 中的 nth element 函式可以完美實現操作,算是學到了一波,格式 nth element a.begin a.begin k a.end 那麼 a k 就是第 k...