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

利用优先级队列的堆排序练习

题目


数组中的第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

提示:

  • 1 <= k <= nums.length <= 105
  • -104 <= nums[i] <= 104

思路

只需要利用数据建堆即可,进行堆排序即可完成第K大数据

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

当然,也可以使用算法库中的堆相关的算法

先建堆,再堆排序

如果建的是小堆,使用堆排,默认是升序,并且堆排序不需要传入compare对象

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {make_heap(nums.begin(), nums.end());sort_heap(nums.begin(), nums.end());while (--k){nums.pop_back();   //vector没有头删}return nums.back();}
};

需要注意的是,如果想建大堆不可以!因为vector没有头插、头删算法。

同时,建大堆必须传入greater<T>()传入一个匿名对象,而不是传入一个类型

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • visual studio 2005 ( vs2005 , vc2005 ) 编译的应用程序无法运行的解决方案
  • 与PC1显著相关的基因 | p值计算
  • 个人旅游网(1)——数据库表详解
  • JVM1-初识JVM
  • 【cocos creator】养成游戏简易事件系统,每日随机事件,每日行动点重置,根据数据检测多结局
  • 【Unity输入】Input Manager 和 Input System对比
  • 实训第三十二天(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 命令模式与宏命令:批量操作的高效实现
  • 探索Edge-TTS与WebSocket集成:打造实时语音交互系统
  • 【网络编程通关之路】 Tcp 基础回显服务器(Java实现)及保姆式知识原理详解 ! ! !
  • addroutes和next()导致的页面无法跳转问题,如登录之后无法跳转到首页,无法重定向,使用next(to)
  • 树、二叉树
  • 42-java 为什么要有包装类
  • [LeetCode] Wiggle Sort
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 78. Subsets
  • Angular 2 DI - IoC DI - 1
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Java方法详解
  • react 代码优化(一) ——事件处理
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 基于web的全景—— Pannellum小试
  • 聊聊flink的TableFactory
  • 如何设计一个比特币钱包服务
  • 算法---两个栈实现一个队列
  • 自定义函数
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # Java NIO(一)FileChannel
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #window11设置系统变量#
  • #职场发展#其他
  • (+4)2.2UML建模图
  • (7)svelte 教程: Props(属性)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (转)为C# Windows服务添加安装程序
  • (转)原始图像数据和PDF中的图像数据
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .“空心村”成因分析及解决对策122344
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CLR Hosting 简介
  • .NET Core引入性能分析引导优化
  • .NET DataGridView数据绑定说明
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调