1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
class Solution
{
public:
// 快速排序分治查找第 k 大元素
int quick_sort(std::vector<int>& nums, int l, int r, int k)
{
// 当区间缩小到单个元素时,返回该元素
if (l == r) return nums[k];
// 基准值选择第一个元素
int x = nums[l], i = l - 1, j = r + 1;
// 快速排序分区过程:双指针划分
while (i < j)
{
do ++i; while (nums[i] > x); // 找到左侧第一个小于等于基准值的元素
do --j; while (nums[j] < x); // 找到右侧第一个大于等于基准值的元素
if (i < j) std::swap(nums[i], nums[j]); // 交换元素使其划分到正确的区间
}
// 判断第 k 大元素所在区间
if (k <= j) return quick_sort(nums, l, j, k); // 在左侧区间
else return quick_sort(nums, j + 1, r, k); // 在右侧区间
}
// 主函数:寻找第 k 大元素
int findKthLargest(vector<int>& nums, int k)
{
return quick_sort(nums, 0, nums.size() - 1, k - 1); // 转换为 0 索引
}
};
|