当前位置: 首页 > news >正文

letcode::数组中的第k个最大元素

数组中的第k个最大元素

给定整数数组 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

思路:

  • sort排序
    从大到小排序后,返回第k-1个元素。
  • 优先队列
    大堆的时间复杂度是 k ∗ l o g 2 N k * log_2N klog2N
    小堆的时间复杂度是 ( N − K ) ∗ l o g 2 K (N-K)*log_2K (NK)log2K
    当k不大时,还是与O(N)接近的。

代码:

sort排序

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end(), greater<int>());
        return nums[k - 1];
    }
};

大堆

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
    //大堆 k * logN
        priority_queue<int> pq(nums.begin(), nums.end());
        while (--k)
        {
            pq.pop();
        }
        return pq.top();
    }
};

小堆

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        //小堆 (N- K)* logN
        priority_queue<int, vector<int>, greater<int>> pq(nums.begin(), nums.begin() + k);
        for (int i = k; i < nums.size(); ++i)
        {
            if (nums[i] > pq.top())
            {
                pq.pop();
                pq.push(nums[i]);
            }
        }
        return pq.top();
    }
};

相关文章:

  • 软件设计先进性之虚拟化技术的应用
  • 三、Keil安装芯片包、下载固件库、建立STM32工程模板
  • Ceres使用
  • 数据结构总复习
  • Github Copilot AI编码完成工具
  • 【限时免费】20天拿下华为OD笔试之【双指针】2023Q1A-两数之和绝对值最小【欧弟算法】全网注释最详细分类最全的华为OD真题题解
  • 逻辑回归
  • 激光塑料透光率检测仪进行材料质量监控
  • 【数据库篇】关系模式的表示——(1)问题的提出
  • 目标检测 详解SSD原理,数据处理与复现
  • SparkSession介绍
  • mysql 性能参数调优详解
  • 随便问问webtab的记录(1)
  • HTML网站稳定性状态监控平台源码
  • Log4j2.xml不生效:WARN StatusLogger Multiple logging implementations found:
  • 【C++初阶】STL详解(五)List的介绍与使用
  • Java核心知识点整理大全9-笔记
  • 【计算机网络】(网络层)定长掩码和变长掩码
  • 华为云cce健康检查有什么用?配置需要注意什么?
  • Spark的通用运行流程与Spark YARN Cluster 模式的运行流程
  • 做网站镜像步骤/优化课程体系
  • 平凉市政府门户网站/青岛seo经理
  • 确定B2B网站建设方案/湖南网站seo找行者seo
  • wordpress网站模板/直播回放老卡怎么回事
  • 玩具网站设计/中国十大电商平台有哪些
  • 手机当服务器建网站/太原网站建设