题解
比较经典的题了,当然经典也意味着解决方案很成熟了。
快排变体,堆排,插入选择都可以做。
Code
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
/* heap sort
priority_queue<int> pq(nums.begin(),nums.end());
for(int i=0;i<k-1;i++)
pq.pop();
return pq.top();
*/
// quick sort
int l=0,r=nums.size()-1;
while(true){
int p = partition(nums,l,r);
if(p==k-1) return nums[p];
else if(p<k-1) l=p+1;
else r=p-1;
}
}
int partition(vector<int>& nums, int left,int right){
int pivot = nums[left],l=left+1,r=right;
while(l<=r){
if(nums[l]<pivot && nums[r]>pivot){
swap(nums[l++],nums[r--]);
}
if(nums[l]>=pivot) l++;
if(nums[r]<=pivot) r--;
}
swap(nums[left],nums[r]);
return r;
}
};