Leetcode 215. 数组中的第K个最大元素 排序 优先队列
地址 https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 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 <= 104
-104 <= nums[i] <= 104
解答
首先最原始的想法就是排序 由于可能有重复的元素,那么遍历一下 找到不重复的由大到小的第K个数
排序 时间复杂度是O(NLogN)
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
return nums[nums.size()-k];
}
};
第二种解决办法是使用优先队列数据结构解决
优先队列本身在插入数据的时候 会自动排序,然后我们一次将优先队列顶端的数据排除K个,剩下的优先队列的顶端数字就是答案
class Solution {
public:
priority_queue <int,vector<int>,less<int> >q;
int findKthLargest(vector<int>& nums, int k) {
for(int i = 0;i < nums.size();i++){
q.push(nums[i]);
}
for(int i = 1; i <k;i++){
q.pop();
}
return q.top();
}
};
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力