C++ topK算法 – 基于快速选择实现
算法功能描述:
返回数组nums中第K小的元素。
算法工作机制描述:
选择数组nums最左边的数数字作为锚点:大于nums[l]的元素移到nums[l]右边,小于nums[l]的元素移到nums[l]左边。
int getTopK(vector<int>& nums, int l, int r, int K) {
int i = l, j = r;
while (i < j) {
while (i < j && nums[j] >= nums[l]) --j;
while (i < j && nums[i] <= nums[l]) ++i;
swap(nums[i], nums[j]);
}
swap(nums[i], nums[l]);
if (i == K) return nums[K];
else if (i < K) return getMid(nums, i + 1, r, K);
else return getMid(nums, l, i - 1, K);
}
2925

被折叠的 条评论
为什么被折叠?



