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

【C++算法】75.优先级队列_数据流中的第 K 大元素

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:
    • 图解


题目链接:

703. 数据流中的第 K 大元素


题目描述:

1d0b5accb59ce128798dd02679c1bdbb


解法

实际上就是Topk问题

  1. 用堆来解决O(n*logk)
  2. 基于快排的快速选择算法O(n)

192c1e39e68bac9cae8613f340698372

用堆来解决

  1. 创建一个大小为k的堆(大根堆[第k大]/小根堆[第k小])
  2. 循环
    1. 依次进堆
    2. 判断堆的大小是否超过k

C++ 算法代码:

class KthLargest 
{// 创建一个小根堆(优先队列)// greater<int>表示按升序排列,堆顶是最小元素,通过传入比较函数 greater<int>,可以将其改为小根堆priority_queue<int, vector<int>, greater<int>> heap;int _k; // 保存k值,表示我们需要找第k大的元素public:// 构造函数KthLargest(int k, vector<int>& nums) {_k = k; // 保存k值// 遍历初始数组,将元素加入堆中for(auto x : nums){heap.push(x); // 将元素添加到堆中// 维护堆的大小为k// 如果堆的大小超过k,弹出堆顶(最小的元素)// 这样堆中始终保存最大的k个元素,且堆顶是第k大的元素if(heap.size() > _k) heap.pop();}}// 添加新元素并返回第k大的元素int add(int val) {heap.push(val); // 将新元素添加到堆中// 维护堆的大小为k// 如果堆的大小超过k,弹出堆顶(最小的元素)if(heap.size() > _k) heap.pop();// 返回堆顶元素,即第k大的元素return heap.top();}
};/*** 使用方法示例:* KthLargest* obj = new KthLargest(k, nums);* int param_1 = obj->add(val);*/

图解

例如:k=3,初始数组 nums=[4,5,8,2]:

  1. 初始化:
    • 添加4: 堆=[4], 大小=1 < k
    • 添加5: 堆=[4,5], 大小=2 < k
    • 添加8: 堆=[4,5,8], 大小=3 = k
    • 添加2: 堆=[2,4,8], 大小=4 > k,移除最小元素2,堆变为[4,5,8]
    • 此时堆顶是4,即第3大的元素
  2. 添加新元素3:
    • 添加3: 堆=[3,4,5,8], 大小=4 > k,移除最小元素3,堆变为[4,5,8]
    • 返回堆顶4,仍是第3大的元素
  3. 添加新元素10:
    • 添加10: 堆=[4,5,8,10], 大小=4 > k,移除最小元素4,堆变为[5,8,10]
    • 返回堆顶5,现在是第3大的元素
http://www.dtcms.com/a/304758.html

相关文章:

  • React 中获取当前路由信息
  • Android权限机制详解:保障用户隐私与应用安全
  • pytorch格式转华为昇腾的om格式
  • 移动语义和右值引用有什么关系?
  • Prometheus-1--什么是Prometheus?
  • Leetcode——475. 供暖器
  • Python - property
  • 学习笔记-中华心法问答系统的性能提升
  • pnpm 入门与实践指南
  • 字节序详解
  • webpack 原理及使用
  • 纸板制造胶工艺学习1
  • FlinkCDC实现多数据源数据集的增量更新实战
  • 磁悬浮转子同频振动:自适应陷波器设计与稳定性深度解析(附MATLAB代码)
  • 8.项目起步(2)
  • 本土化DevOps实践新篇章:Gitee引领企业高效协作新时代
  • 自学嵌入式 day37 HTML
  • Go 客户端玩转 ES|QL API 直连与 Mapping Helpers 实战详解
  • 做副业,要事不过三
  • CentOS 7部署Redis
  • 如何理解js中的副作用
  • 沪铝本周想法
  • docker docker与swarm入门笔记
  • 云原生周刊:2025年的服务网格
  • 【Linux基础知识系列】第七十篇 - 了解swap分区的概念
  • 【Linux篇】补充:消息队列和systemV信号量
  • 【图像噪点消除】——图像预处理(OpenCV)
  • 以太坊十年:智能合约与去中心化的崛起
  • 第5课 sort函数
  • Couchbase 详解