下面代码:求解第k大的数
力扣215:
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int len = nums.size();
int left = 0;
int right = len - 1;
int target = len - k;
while(true)
{
int index = partition(nums, left, right);
if(target == index)
{
return nums[index];
}
else if(target > index)
{
left = index + 1;
}
else
{
right = index - 1;
}
}
}
int partition(vector<int>& nums, int left, int right)
{
int tmp = nums[left];
while(left < right)
{
while(left < right && nums[right] > tmp)
right--;
nums[left] = nums[right];
while(left < right && nums[left] <= tmp)
left++;
nums[right] = nums[left];
}
nums[left] = tmp;
return left;
}
};
// 代码参考 https://leetcode-cn.com/problems/kth-largest-element-in-an-array/solution/partitionfen-er-zhi-zhi-you-xian-dui-lie-java-dai-/
// 讲解参考 https://www.bilibili.com/video/BV16i4y1x7TN?from=search&seid=6656008681955547018
上面给出的代码都是求解第k大元素;若想要得到Top K元素(前k大),仅需要将代码做稍微的修改:比如,扫描完成后的小顶堆对应于Top K,Quick Select算法用中间变量保存Top K元素。
文中最后一段话:https://www.cnblogs.com/qlky/p/7512199.html