
//快排辅助
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
k = nums.size() - k +1;
int pos, left = 0, right = nums.size() - 1;
pos = QuickSortHelper(nums, left, right);
while (pos != k-1) {
if (pos < k-1) {
left = pos + 1;
pos = QuickSortHelper(nums, left, right);
}
if (pos > k-1) {
right = pos - 1;
pos = QuickSortHelper(nums, left, right);
}
}
return nums[pos];
}
int QuickSortHelper(vector<int> &nums, int left, int right) {
int std = nums[left], pos = left + 1;
for (int i = left + 1; i <= right; i++) {
//if (nums[i] > std) ;
if (nums[i] <std) {
swap(nums[pos], nums[i]);
pos++;
}
}
swap(nums[left], nums[pos - 1]);
return pos - 1;
}
};
int main()
{
Solution sol;
vector<int> input1 = { 3,2,1,5,6,4 };
//sol.findKthLargest(input1, 2)
cout << sol.findKthLargest(input1, 6);
cout << endl;
return 0;
}

本文介绍了一种使用快速排序算法寻找数组中第K大的元素的方法。通过自定义的快速排序辅助函数,实现了对输入数组的部分排序,从而高效地找到指定位置的元素。示例代码展示了如何使用此方法,并在主函数中进行了测试。
311

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



