- 每次选定分界点,根据分界点分好左右两端区间之后
- 判断分界点位置和k的关系,从而去相应的区间继续递归找分界点,直到找到
- 其它方法:排序(nlogn),堆(nlogn, nlogk两种)
class Solution {
public:
int quicksort(vector<int>& q, int l, int r, int k){
if(l >= r) return q[l];
int i = l - 1, j = r + 1, x = q[l + (r - l) / 2];
while(i < j){
while(q[++ i] > x);
while(q[-- j] < x);
if(i < j) swap(q[i], q[j]);
}
int s1 = j - l + 1;
if(s1 >= k) return quicksort(q, l, j, k);
else return quicksort(q, j + 1, k - s1, k);
}
int findKthLargest(vector<int>& nums, int k) {
return quicksort(nums, 0, nums.size() - 1, k);
}
};`