Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int findKthLargest(vector<int>& nums, int k) {
- int kn = nums.size()-k;
- return quickselect(0, nums.size()-1, kn, nums);
- }
- int quickselect(int left, int right, int k, vector<int>& num){
- if(left == right) return num[left];
- int pivot = left;
- int split = partition(left, right, pivot, num);
- if(k == split)
- return num[k];
- else if(k < split)
- return quickselect(left, split-1, k, num);
- else
- return quickselect(split+1, right, k, num);
- }
- int partition(int left, int right, int pivot, vector<int>& num){
- while(left<right){
- while(left < num.size() && num[left] <= num[pivot])
- left++;
- while(num[right] > num[pivot])
- right--;
- if(left<right)
- swap(num[left], num[right]);
- else
- swap(num[pivot], num[right]);
- }
- return right;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement