有乙個整數陣列,請你根據快速排序的思路,找出陣列中第k大的數。
給定乙個整數陣列a,同時給定它的大小n和要找的k(k在1到n之間),請返回第k大的數,保證答案存在。
測試樣例:
[1,3,5,2,2],5,3
返回:21.若不按快排思路,用最大堆實現,建堆複雜度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...