题意:数组求第k大。
分析:快排
class Solution {
public:
int Partition(vector<int>& nums, int l, int r){
int p = nums[l];
while(l < r){
while(l < r && nums[r] >= p) --r;
nums[l] = nums[r];
while(l < r && nums[l] <= p) ++l;
nums[r] = nums[l];
}
nums[l] = p;
return l;
}
int QuickSort(vector<int>& nums, int k, int l, int r){
int p = Partition(nums, l, r);
if(r - p + 1 == k) return nums[p];
else if(r - p + 1 > k) return QuickSort(nums, k, p + 1, r);
else return QuickSort(nums, k - (r - p + 1), l, p - 1);
}
int findKthLargest(vector<int>& nums, int k) {
int len = nums.size();
return QuickSort(nums, k, 0, len - 1);
}
};
LeetCode 215. Kth Largest Element in an Array(数组求第k大)
原文:https://www.cnblogs.com/tyty-Somnuspoppy/p/12595365.html