一、题目描述
二、算法原理
三、代码实现
class Solution {
public:
int getRandom(int left,int right,vector<int>& nums)
{
return nums[rand()%(right-left+1)+left];
}
int qsort(int l,int r,vector<int>& nums,int k)
{
if(i==r)
{
return nums[l];
}
int key=getRandom(l,r,nums);
int i=l,left=l-1,right=r+1;
while(i<right)
{
if(nums[i]<key)
swap(nums[++left],nums[i++]);
else if(nums[i]>key)
swap(nums[i],nums[--right]);
else
i++;
}
int c=r-right+1,b=right-left-1,a=left-l+1;
if(c>=k)
{
return qsort(right,r,nums,k);
}
else if(b+c>=k)
return key;
else
{
return qsort(l,left,nums,k-b-c);
}
}
int findKthLargest(vector<int>& nums, int k)
{
srand(time(NULL));
return qsort(0,nums.size()-1,nums,k);
}
};