This is an exercise of the selection algorithm in the class this week just in time. In order to find the kth largest number, we first choose a random pivot, then put the numbers smaller and larger than it into 2 sequences. After that, if the size of the larger sequence is bigger than k, it does recursion in the larger sequence; if the size is smaller than rest length of the small sequence, do recursion in the small sequence with another k. The pivot finally returned is the answer.
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
srand(time(0));
int size = nums.size();
int n = rand()%size;
int pivot = nums[n];
vector<int> v1, v2;
for(int i=0;i<size;i++){
if(nums[i]>pivot)
v1.push_back(nums[i]);
else if(nums[i]<pivot)
v2.push_back(nums[i]);
}
if(k<=v1.size())
return findKthLargest(v1,k);
else if(k>(size-v2.size()))
return findKthLargest(v2,k-(size-v2.size()));
else
return pivot;
}
};