其实c++有库函数
class Solution {
int _k;
public:
// [0,l][l+1,r-1][r,nums.size()-1]
int _sort(int left,int right,vector<int>& nums)
{
if(left==right)return nums[left];
int aim = getRandom(left,right,nums);
int i = left,l = left-1,r = right+1;
while(i<r)
{
if(nums[i]<aim)swap(nums[++l],nums[i++]);
else if(nums[i] == aim)i++;
else swap(nums[--r],nums[i]);
}
if(nums.size()-1-r+1>=_k)
return _sort(r,right,nums);
else if(nums.size()-1-(l+1)+1>=_k)
return nums[i-1];
else
return _sort(left,l,nums);
}
int getRandom(int left,int right,vector<int>& nums)
{
int r = rand();
return nums[r%(right-left+1) + left];
/* 偏移量 */
}
int findKthLargest(vector<int>& nums, int k)
{
srand(time(NULL));
_k = k;
return _sort(0,nums.size()-1,nums);
}
};