0
点赞
收藏
分享

微信扫一扫

[LeetCode Solution] 215. 数组中的第k个最大元素


[LeetCode Solution] 215. 数组中的第k个最大元素

题目传送门:​​https://leetcode.cn/problems/kth-largest-element-in-an-array/​​

题目描述

给定整数数组 ​​nums​​​ 和整数 ​​k​​​,请返回数组中第 ​​k​​ 个最大的元素。

请注意,你需要找的是数组排序后的第 ​​k​​​ 个最大的元素,而不是第 ​​k​​ 个不同的元素。

你必须实现时间复杂度为 ​​O(n)​​ 的算法解决此问题。

示例1:

输入:[3,2,1,5,6,4], k = 2
输出:5

示例2:

输入:[3,2,3,1,2,4,5,5,6], k = 4
输出: 4

提示:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

解题思路

本题要求时间复杂度在 ​​O(n)​​​ 之内,构建长度为 ​​k​​ 的优先队列:

  • 数组 ​​nums​​​ 的前 ​​k​​ 个元素入队列;
  • 后面的元素依次与队首(当前队列中最小的元素)比较,如果队首较小,则队首出队,当前元素入队;

class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int, vector<int>, greater<>> q;
for(int i=0;i<nums.size();i++){
if(q.size() < k)
q.push(nums[i]);
else{
if(q.top() < nums[i]){
q.pop();
q.push(nums[i]);
}
}
}
return q.top();
}
};


举报

相关推荐

0 条评论