https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
额,感觉有点混了,比直接排序好不到哪里去,还比排序慢了。那些大佬们的高端思路tql
思路
维护一个小根堆,不到k个值就push,到了k个就判断,如果比堆顶还小,就不用push了,比他大就push,再pop掉多出的一个,等全部遍历完,堆里放着就是最大的k个数,堆顶就是第k大的数
代码
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue <int, vector<int>, greater<int>> q;
for (int i = 0; i < nums.size(); i++) {
if (q.size() && q.top() == nums[i]) continue;
if (q.size() < k || q.top() < nums[i]) q.push(nums[i]);
if (q.size() > k) q.pop();
}
return q.top();
}
};