Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
解答:这里用了快速排序的改进版,成为快搜。就是在快排的基础上判断我们每一轮最后调换的第一个数和后面的某一位的那个数的位置,就是说假如有a个数大于第一个数(因为是找第k大的数,所以大于第一个数的数字放前面,小于第一个数的数字放后面),我们判断一下a和k的关系以决定这个是不是我们要找的数。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
if(nums.empty()) return 0;
return quicksearch(nums,0,nums.size()-1,k);
}
int quicksearch(vector<int>& nums,int begin,int end ,int k){
int l=begin;
int first=nums[begin];
for(int r=l+1;r<=end;r++){
if(nums[r]>first) swap(nums[++l],nums[r]);
}
swap(nums[begin],nums[l]);
if(l==k-1) return nums[l];
else if(l<k-1) return quicksearch(nums,l+1,end,k);
else return quicksearch(nums,begin,l-1,k);
}
};