zoukankan      html  css  js  c++  java
  • 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驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    c语言使用指针交换数值
    OD
    ADO Connection failure
    Javascript 日期 加减
    RAD C++Builder xe7 std::map xtree BUG
    c++ map
    c++ vector
    TDictionary 是delphi用的,c++builder用起来太吃力。
    datasnap 如何监控客户端的连接情况
    DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明
  • 原文地址:https://www.cnblogs.com/itdef/p/15227863.html
Copyright © 2011-2022 走看看