class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
return quickSelect(nums, k);
}
int quickSelect(vector<int>& nums, int k) {
// 基于快排的快速选择
// 随机选择基准数字
int p = nums[rand() % nums.size()];
// 将大于等于小于的元素分别放入三个数组
vector<int> big, equal, small;
for (int a : nums) {
if (a < p) small.push_back(a);
else if (a == p) equal.push_back(a);
else big.push_back(a);
}
// 第k大元素在big中, 递归划分
if (k <= big.size()) {
return quickSelect(big, k);
}
// 第k大元素在small中, 递归划分
if (big.size() + equal.size() < k) {
return quickSelect(small, k - (big.size() + equal.size()));
}
// 第k大元素在equal中, 返回p
return p;
}
};
leetcode每日一题第七十九天
最新推荐文章于 2024-10-16 10:13:45 发布