代码
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
srand(time(0));
int q = quicksort(nums, 0, nums.size() - 1, nums.size() - k);
return nums[q];
}
int quicksort(vector<int>& nums, int l, int r, int index) {
int pos = randompartition(nums, l, r);
if (pos == index) return pos;
else {
return pos < index ? quicksort(nums, pos + 1, r, index) : quicksort(nums, l, pos - 1, index);
}
}
int randompartition(vector<int>& nums, int l, int r) {
int i = rand() % (r - l + 1) + l;
swap(nums[i], nums[r]);
int pos = partition(nums, l, r);
return pos;
}
int partition(vector<int>& nums, int l, int r) {
int i = l - 1;
for (int j = l; j <= r - 1; j++) {
if (nums[j] <= nums[r]) {
i++;
swap(nums[i], nums[j]);
}
}
swap(nums[i+1], nums[r]);
return i + 1;
}
};