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驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
阿里打赏 微信打赏
原文地址:https://www.cnblogs.com/itdef/p/15227863.html