方法1:采用快排的思想:
采用随机化优化快速排序
class Solution {
public:
int partition(vector<int>& nums,int l,int r)
{
int v=nums[l];
int j=l;
for(int i=l+1;i<=r;i++)
{
if(nums[i]>=v)
{
swap(nums[i],nums[j+1]);
j++;
}
}
swap(nums[l],nums[j]);
return j;
}
int quicksort(vector<int>& nums,int l,int r,int k)
{
if(l==r)
return nums[l];
swap(nums[l],nums[rand()%(r-l+1)+l]);
int v=nums[l];
int p=partition(nums,l,r);
if(p==k)
{
return nums[p];
}
else if(p>k)
{
return quicksort(nums,l,p-1,k);
}
else return quicksort(nums,p+1,r,k);
}
int findKthLargest(vector<int>& nums, int k) {
srand(time(NULL));
int n=nums.size();
return quicksort(nums,0,n-1,k-1);//k-1表示下标由1改为从0开始
}
};