本文介绍的两个题比前面的更重要。这两个题的出现频率非常高,虽然每个题都还有多种方式,但是最正统的就是用堆来做。更有意思的是这两个题一般只说方案,不用手写。如果想清楚了就能应付一道面试题,何乐而不为呢?

1.LeetCode215 数组中的第K大元素

这个题其实有多种解法,先看使用优先级队列的。如果使用堆,记住一个口诀:

找K大用小根堆

找K小用大根堆。

如果参考堆的特性,不难理解,请读者想想为啥要这样,这一点非常重要。

public int findKthLargest(int[] nums, int k) {// 正确性判断if (0 == nums.length || null == nums || k <= 0 || k > nums.length) {return -1;}// 构造优先队列,默认为最小堆,传入自定义的比较器转换成最大堆PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);for (Integer num : nums) {pq.add(num);}for (int i = 0; i < k - 1; i++) {pq.remove();}return pq.peek();
}

这个题还可以用其他方式,例如快速排序法,这个我们后面再说,

这题更重要的场景是如果从几个G的大数据中找第K个最大,或者从流数据中找第K个最大,此时几乎只能用堆来进行,这也是为什么本题如此重要的原因。

2.LeetCode 295 数据流的中位数

也是剑指offer41题

这个题的一种思路是使用两个优先级队列,怎么做呢,我发现LeetCode的网站已经做了很详细的介绍,直接看这里吧

这题貌似还有多种其他的方式,例如简单排序等,但是这个在流数据中是不行的,理解并记住两个堆的方法就行了。

堆和优先级队列4:不泡妹子都要会的LeetCode7道题之二相关推荐

  1. 堆和优先级队列3:不泡妹子都要会的LeetCode7道题之一

    我们前面费了那么大篇幅介绍堆和优先级队列,就是为了分析本文的7道题.而这7道题, 特别!特别!特别! 重要!重要!重要! 不过呢,正如我们前面说的,这些题目其实知道怎么处理就行,不必一定要写出来. 1 ...

  2. 使用最小堆使用优先级队列(c语言版本)

    下面的例子来自Weiss的<数据结构与算法分析:c语言描述>,自己亲自敲了一遍,跑了个demo,并将结果记录下来. binheap.h的头文件声明 //description: 使最小堆实 ...

  3. 优先级队列 c语言,使用最小堆使用优先级队列(c语言版本)

    下面的例子来自Weiss的<数据结构与算法分析:c语言描述>,自己亲自敲了一遍,跑了个demo,并将结果记录下来. binheap.h的头文件声明 //description: 使最小堆实 ...

  4. 数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列

    目录 堆的概念 堆的存储方式 堆的相关操作 堆的向下调整. 堆的创建 堆的插入和向上调整 堆的删除 用堆模拟优先级队列 堆的概念 堆是逻辑结构为二叉树存储结构为数组数组的一种数据结构,为什么这么说呢? ...

  5. 《恋上数据结构第1季》二叉堆实现优先级队列

    优先级队列(Priority Queue) 优先级队列简介 优先队列的底层实现 二叉堆实现优先级队列源码 测试代码 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基 ...

  6. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)

    目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...

  7. 《算法导论》第六章之堆和优先级队列相关算法C语言实现

    #include <stdio.h> int heap_size = 10; void max_heapify(int *A, int i){ //维持最大堆性质int l = 2 * i ...

  8. 堆(优先级队列)及TOPK问题详解

    文章目录 1.二叉树的顺序存储 1.1存储方式 1.2下标关系 2.堆的应用:优先级队列(默认小根堆) 2.1概念 2.2Java中优先级队列的简单介绍 3.Topk问题 3.1求N个数中前k个最大/ ...

  9. 二叉堆详解实现优先级队列

    二叉堆详解实现优先级队列 文章目录 二叉堆详解实现优先级队列 一.二叉堆概览 二.优先级队列概览 三.实现 swim 和 sink 四.实现 delMax 和 insert 五.最后总结 二叉堆(Bi ...

最新文章

  1. Linux关闭开关机动画,centos7删除开机动画及修改启动菜单
  2. 保存您的lambda,以备不时之需-保存到文件
  3. qt int转换成qstring_Qt 加载cern-root库 并调用root类
  4. netty发送对象消息
  5. VS2005代码格式化
  6. PHP 调用shell命令
  7. wcf 基础教程 第一讲 wcf基础知识
  8. 显卡天梯图2022最新排名
  9. 黑掉php网站,如何黑掉一个网站
  10. 练气六层 —— 重要知识点总结
  11. Unity - Unable to merge android manifests.
  12. 石墨文档代码学习笔记分享
  13. Meanshift 和 Camshift
  14. ASP.NET2.0:利用Localization实现本地化
  15. java返回给前端的json数据中带有转义符号如何处理
  16. 切换效果:coverflow 封面轮播图
  17. deep learning with python_d是什么意思_d的翻译_音标_读音_用法_例句_爱词霸在线词典...
  18. C++ OpenCV Contrib模块LBF人脸特征点检测
  19. 【Luat-air551G】4 air551G连接esp32获取GGA数据
  20. Python requests+bs4爬取中药数据库TCMSP的资源获得清肺排毒汤的靶向基因(曲线救国)

热门文章

  1. 【深度学习】——分类损失函数、回归损失函数、交叉熵损失函数、均方差损失函数、损失函数曲线、
  2. nodejs 游戏框架_NODEJS各种框架
  3. 使用conda安装包
  4. Spring框架下集成Activiti 5.17.0的diagram-viewer
  5. php类似微信聊天框,仿微信UI界面的PHP+Swoole多人聊天室 TP6框架
  6. Vscode、cygwin或simply fortran配置gfortran及GCC
  7. 毕业设计 基于STM32的智能宠物投喂系统(全套资料)
  8. 【Linux】计算机硬件组成部分常用命令
  9. 视频教程-赵强老师:Oracle数据库从10g到11g(5)过程、函数和触发器-Oracle
  10. CSS入门。(仅供参考)