原题链接:数组中的第K个最大元素述
个人解法
思路:
快速选择算法
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
代码:
class Solution {
public:
int quick_sort(vector<int> &nums, int left, int right, int k) {
if(left == right) return nums[left];
int p = nums[left];
int l = left, r = right;
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;
if(k <= (l - left + 1)) return quick_sort(nums, left, l, k);
else return quick_sort(nums, l + 1, right, k - l + left - 1);
}
int findKthLargest(vector<int>& nums, int k) {
return quick_sort(nums, 0, nums.size() - 1, nums.size() - k + 1);
}
};