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

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


题目


数组中的第 K 个最大元素


思路

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

代码

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();
    }
};

代码讲解:


priority_queue<int> pq(nums.begin(), nums.end());

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


int i = 0;
        while (i < k - 1) {
            pq.pop();
            i++;
        }

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


return pq.top();
    }
};

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


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

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();
    }
};

(本题完)

相关文章
|
3月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
103 4
|
3月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
4月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
49 4
|
4月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
170 0
|
5月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
43 6
|
5月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
48 6
|
5月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
70 5
|
4月前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组
|
5月前
|
vr&ar C++
1695. 删除子数组的最大得分(C++,滑动窗口)
1695. 删除子数组的最大得分(C++,滑动窗口)
|
29天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
50 2