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

HOT74-数组中的第K个最大元素

        leetcode原题链接:数组中的第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个元素用小顶堆,求最小的k个元素用大顶堆。同时注意下c++的语法糖。std::less用于定义大顶堆, std::greater用于定义小顶堆。

C++代码

#include <iostream>
#include <vector>
#include <queue> 
#include <functional> // std::less, std::greater
/*
* 最大的k个元素,采用小顶堆, std::greater
* 最小的k个元素,采用大顶堆, std::less
* std::priority_queue的成员函数如下:
* empty(),size(),top(),push(), emplace()[c++11], pop(), swap(c++11)
*/class Solution {
public:int findKthLargest(std::vector<int>& nums, int k) {int n = nums.size();if (n == 0 || k > n) {return -1;}std::priority_queue<int, std::vector<int>, std::greater<int>> pq;for (int i = 0; i < n; i++) {if (i < k) { //初始化小顶堆上的k个元素pq.emplace(nums[i]);} else if (nums[i] > pq.top()) { //当前遍历的数字比堆顶元素大pq.pop();//先弹出堆顶元素pq.emplace(nums[i]);//再压入元素}}return pq.top();//小顶堆的头节点就是第k大元素}
};

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

相关文章:

  • 类与对象【中】
  • uni-app:实现列表单选功能
  • vue中axios二次封装并发起网络请求配置
  • 开源全文搜索引擎汇总
  • gitlab CI/CD 安装 gitlab runner
  • 服务器中了malox勒索病毒后怎么办怎么解决,malox勒索病毒解密数据恢复
  • Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)
  • word转pdf两种方式(免费+收费)
  • 基于图像形态学处理的目标几何形状检测算法matlab仿真
  • python系列教程211——map
  • SW - 3D打印件最好带上浮雕文字标记
  • Kafka-副本数量设置
  • 解决github打不开的方法
  • 【云原生】Docker中容器管理常用所有命令
  • Flutter video_player点击重新播放
  • CSS3属性之text-overflow:ellipsis
  • 【深度学习_TensorFlow】梯度下降
  • C++使用 auto 自动推断类型
  • 【前端面试手撕题】call、bind、new、freeze、浅拷贝
  • MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评
  • 实现5*5正方形网格x轴和y轴显示对应数值组件封装
  • 基于Matlab实现图像压缩技术(附上完整源码+图像+程序运行说明)
  • 棒球联盟对于市场发展规划·棒球1号位
  • ansible控制主机和受控主机之间免密及提权案例
  • flink1.17 eventWindow不要配置processTrigger
  • Python导出SqlServerl数据字典为excel
  • PB:DDE服务器函数
  • awk经典实战、正则表达式
  • Python脚本-时间盲注
  • 面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂