/*分治法,采用快排中用到的partition函数。*/
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int left = 0, right = nums.size()-1;
while(left <= right){
int res = findKthLargest(nums, left, right);
if(res == nums.size()-k) return nums[res];
else if(res < nums.size()-k) left = res+1;
else right = res-1;
}
}
int findKthLargest(vector<int> &nums, int left, int right){
int x = nums[right];
int i = left-1;
for(int j = left; j < right; ++j){
if(nums[j] <= x){
++i;
swap(nums[i], nums[j]);
}
}
swap(nums[i+1], nums[right]);
return i+1;
}
};
LeetCode之Kth Largest Element in an Array
最新推荐文章于 2021-06-04 20:58:45 发布