数组中的第 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();
    }
};

(本题完)

相关推荐
眸笑丶几秒前
使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型
开发语言·python
enyp8021 分钟前
Qt QStackedWidget 总结
开发语言·qt
gu2034 分钟前
c#编程:学习Linq,重几个简单示例开始
开发语言·学习·c#·linq
lly20240634 分钟前
SQLite 删除表
开发语言
wjs202440 分钟前
HTML 字符实体
开发语言
二十雨辰1 小时前
[Java基础]网络编程
java·开发语言
cookies_s_s1 小时前
Linux--进程(进程虚拟地址空间、页表、进程控制、实现简易shell)
linux·运维·服务器·数据结构·c++·算法·哈希算法
AC使者1 小时前
介绍 TensorFlow 的基本概念和使用场景。
开发语言·自然语言处理·sqlite·github
不想编程小谭2 小时前
力扣LeetCode: 2506 统计相似字符串对的数目
c++·算法·leetcode
kiramario2 小时前
【结束】JS如何不通过input的onInputFileChange使用本地mp4文件并播放,nextjs下放入public文件的视频用video标签无法打开
开发语言·javascript·音视频