题解 | 寻找第K大
寻找第K大
https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
class Solution { public: //完整快速排序后,第K大的数一定在K-1的下标处; //利用二分法, 减少处理; int findKth(vector<int>& a, int n, int K) { return quikSelect(a, 0, n-1, K-1); } int quikSelect(vector<int>& a, int left, int right, int k){ if(left == right) return a[left]; int pivotIndex = partition(a, left, right); if(pivotIndex == k){ return a[pivotIndex]; }else if(pivotIndex > k){ return quikSelect(a, left, pivotIndex-1, k); }else if(pivotIndex < k){ return quikSelect(a, pivotIndex+1, right, k); } return -1; } int partition(vector<int>& a, int left, int right){ //快速排序 int pivot = a[right]; int i=left; for(int j=left; j<right; ++j){ if(a[j] > pivot){ swap(a[i], a[j]); ++i; } } swap(a[i], a[right]); return i; } };