class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
if(nums.size()<=0||nums.size()<k) return -1;
int res = quick(nums,0,nums.size()-1,nums.size()-k);
return res;
}
int quick(vector<int>& nums,int l,int r,int k){
int pivot = partition(nums,l,r);
if(pivot==k) return nums[pivot];
if(k>pivot) return quick(nums,pivot+1,r,k);
else return quick(nums,l,pivot-1,k);
}
int partition(vector<int>& nums,int l,int r){
int pivot = nums[l];
while(l<r){
while(l<r && nums[r]>pivot)
r--;
if(l<r) {
nums[l]=nums[r];
l++;
}
while(l<r && nums[l]<pivot)
l++;
if(l<r){
nums[r]=nums[l];
r--;
}
}
nums[l]=pivot;
return l;
}
};
快速排序,先分区,返回下标,在分区函数中partition,循环l<r,不带等于,等于就没笔记交换了覆盖了。