Leecode刷题
- 题目描述
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
- 示例
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
- 代码一(自己实现的快速排序)
//快速排序内部子表划分
void partition(vector<int> &a, int s, int t, int &cutpoint)
{
int x = a[s];
int i = s, j = t;
while (i != j)
{
while (i < j&&a[j]>x)
j--;
if (i < j)
{
a[i] = a[j];
i++;
}
while (i < j&&a[i] < x)
i++;
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = x;
cutpoint = i;
}
//快速排序
void quick_sort(vector<int> &a, int s, int t)
{
int i;
if (s < t)
{
partition(a, s, t, i=0);
quick_sort(a, s, i-1);
quick_sort(a, i + 1, t);
}
}
class Solution {
public:
int findKthLargest(vector<int>& nums, int k)
{
quick_sort(nums,0,nums.size()-1);
return nums[nums.size()-k];
}
};
- 代码二(调用库函数,且事实证明自己写的快排比起库函数是如此垃圾)
class Solution {
public:
int findKthLargest(vector<int>& nums, int k)
{
sort(nums.begin(),nums.end());
return nums[nums.size()-k];
}
};