数组中的第 K 个最大元素(C++实现)

数组中的第 K 个最大元素

题目


数组中的第 K 个最大元素


思路

通过使用优先队列(最大堆)来找到数组中第k大的元素。通过弹出最大堆中的前k-1个元素,留下堆中的顶部元素作为结果返回。

代码

c 复制代码
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int> pq(nums.begin(),nums.end());
        int i=0;
        while(i<k-1)
        {
            pq.pop();
            i++;
        }
        return pq.top();
    }
};

代码讲解:


c 复制代码
priority_queue<int> pq(nums.begin(), nums.end());

在函数内部,创建了一个名为pq的优先队列(优先级队列),它是一个最大堆。通过将nums数组的元素从begin()到end()范围内添加到优先队列中,初始化了一个包含数组所有元素的最大堆。


c 复制代码
int i = 0;
        while (i < k - 1) {
            pq.pop();
            i++;
        }

接下来,使用一个循环,执行k-1次pq.pop()操作,将最大堆中的前k-1个元素弹出。由于最大堆的性质,每次弹出的都是当前堆中的最大元素。


c 复制代码
return pq.top();
    }
};

最后,返回最大堆中的顶部元素,即第k大的元素。由于最大堆的性质,堆顶元素即为堆中的最大元素。


下面是添加了注释的代码:

c 复制代码
class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        // 创建一个最大堆,用于存储数组元素
        priority_queue<int> pq(nums.begin(), nums.end());

        int i = 0;
        // 弹出最大堆中的前 k-1 个元素
        while (i < k - 1) {
            pq.pop();
            i++;
        }

        // 返回最大堆的顶部元素,即第 k 大的元素
        return pq.top();
    }
};

(本题完)

相关推荐
青少儿编程课堂24 分钟前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
沫璃染墨2 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
达子6662 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
道尔柯南3 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀3 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
tachibana23 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
临床数据科学和人工智能兴趣组4 小时前
正则表达式的基础语法的基本符号
开发语言·人工智能·python·正则表达式·r语言·r语言-4.2.1·workbudyy
王中阳Go4 小时前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
geats人山人海4 小时前
java 4继承
java·开发语言
aqiu1111114 小时前
【C++算法打怪专栏】C++ `unordered_set` 常用初始化与插入方法总结
开发语言·c++·算法