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

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

数组中的第 K 个最大元素

  • 题目
  • 思路
  • 代码

题目


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

(本题完)

http://www.lryc.cn/news/247544.html

相关文章:

  • C++ day42背包理论基础01 + 滚动数组
  • 数字人透明屏幕是如何工作的?
  • MIGO收货报替代“ZF002“, 步骤““ 中存在语法错误消息号 GB032错误
  • Vue3的transition标签以及animate.css使用详解
  • IDEA不支持Java8了怎么办?
  • flutter的TextField参数、案例整理(上)
  • 【Linux进阶之路】进程间通信
  • 深度学习框架配置
  • 全局配置
  • leetcode算法之字符串
  • mongodb查询数据库集合的基础命令
  • 基于FactoryBean、实例工厂、静态工厂创建Spring中的复杂对象
  • Android 如何让路由器或者其他AP设备获取到主机名
  • java三大集合类--List
  • 机器人向前冲
  • jq——实现弹幕滚动(往左滚动+往右滚动)——基础积累
  • 深度学习第2天:RNN循环神经网络
  • 深度学习之基于百度飞桨PaddleOCR图像字符检测识别系统
  • 九、LuaTable(表)
  • 每日一题(LeetCode)----链表--链表最大孪生和
  • 腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
  • C++学习之路(十一)C++ 用Qt5实现一个工具箱(增加一个进制转换器功能)- 示例代码拆分讲解
  • C语言每日一题(40)栈实现队列
  • Vue.js 的生命周期
  • SeaTunnel引擎下的SQL Server CDC解决方案:构建高效数据管道
  • 【攻防世界-misc】Encode
  • visual c++ 2019 redistributable package
  • WPF中DataGrid解析
  • 在数据库中进行表内容的修改(MYSQL)
  • Android中的多进程