堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。整个堆的最小元素总是位于二叉树的根节点。

python的heapq模块提供了对堆的支持。这个模块实现的是小顶堆

堆数据结构最重要的特征是heap[0]永远是最小的元素

1.heapq.heappush(heap,item)

注:heap为定义堆,item增加的元素

2.heapq.heapify(list)

将列表转换为堆

3.heapq.heappop(heap)

注:删除最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素。

4.heapq.heapreplace(heap.item)

注:删除最小元素值,添加新的元素值

5.heapq.nlargest(n,heap)

注:查询堆中的最大元素,n表示查询元素个数

6.heapq.nsmallest(n,heap)

注:查询堆中的最小元素,n表示查询元素的个数

leetcode练习题:

class Solution:

def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:

if k == 0:

return list()

hp = [-x for x in arr[:k]]

heapq.heapify(hp)

for i in range(k, len(arr)):

if -hp[0] > arr[i]:

heapq.heappop(hp)

heapq.heappush(hp, -arr[i])

ans = [-x for x in hp]

return ans

pop python3_python3 -- 堆(heapq)相关推荐

  1. python之堆heapq模块

    python之堆heapq模块 堆是一种特殊的树形结构,通常我们所说的堆的数据结构指的是完全二叉树,并且根节点的值小于等于该节点所有子节点的值. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆. ...

  2. [转载] python中 堆heapq以及 队列queue的使用

    参考链接: Python中的堆队列(Heap queue或heapq) python中 堆heapq以及 队列queue的使用 1. 堆heapq的使用 ## -------------------- ...

  3. python 中的最大堆和最小堆(heapq库)

    目录 首先来看一下什么是最大堆和最小堆? python heapq库中的一些常用方法 小试牛刀 首先来看一下什么是最大堆和最小堆? 最大堆:一种经过排序的完全二叉树,其中任意非终端节点数值均不小于其左 ...

  4. anspython_python堆(heapq)的实现

    堆的实现 最小的K个数. 堆插入.取出都是log(n)的复杂度. class Heap: def __init__(self): self.data_list = [] def insert(self ...

  5. python 最小堆类型: heapq

    目录 1.heapq 的常用方法 2.几个例子 a.最小堆的创建以及增删 b.如何使用 heapq 创建最大堆 c.获取第 k 大/第 k 小数据 d.列表中的元素是元组 heapq 是 python ...

  6. python 优先队列_Python中heapq与优先队列【详细】

    本文始发于个人公众号:TechFlow, 原创不易,求个关注 今天的文章来介绍Python当中一个蛮有用的库--heapq. heapq的全写是heap queue,是堆队列的意思.这里的堆和队列都是 ...

  7. python heap_python topN max heap,使用heapq还是自己实现?

    heapq的唯一问题是它没有提供像stdlib中其他所有功能一样的关键功能. (如果你好奇为什么,Raymond Hettinger在 this email中解释过.他是对的,heapq无法提供与其他 ...

  8. python标准库模块_Python标准库模块之heapq

    该模块提供了堆排序算法的实现.堆是二叉树,最大堆中父节点大于或等于两个子节点,最小堆父节点小于或等于两个子节点. 创建堆 heapq有两种方式创建堆, 一种是使用一个空列表,然后使用heapq.hea ...

  9. python堆模块_python内置堆模块

    heapq python内置heapq模块,通过import heapq导入. heapq模块是用于堆实现优先队列.我们知道队列是先进先出(FIFO), heapq中的优先队列指的是不论谁先进,最小的 ...

最新文章

  1. 一位资深Java的阿里系公司实战面试经验,套路还是面试官的多
  2. 【Tools】VNC Server 6.7安装详解
  3. IIS如何配置可以下载APK、IPA文件
  4. Java 中参数传递是传值还是引用?
  5. Magento 2开发教程 - 创建新模块
  6. oracle 游标 904,如何解决Oracle数据库游标连接超出问题
  7. 写速度提升20%,Elasticsearch 创始人给腾讯云发来感谢信
  8. 光子计算机玩游戏,用于光计算的光子计算机
  9. mybatis传多个参数实例
  10. 前端也能玩转机器学习?Google Brain 工程师来支招!
  11. 分布式事务综合案例分析
  12. 2023年辽宁大学原子与分子物理考研上岸前辈备考经验指导
  13. MFC对磁盘测速工具CrystalDiskMark6_0_0的工厂方式控制源代码 同时控制 8个窗口,界面同步显示,比较完整点的版本
  14. jwt的token自动续约_关于JWTToken自动续期的解决方案
  15. UNtubu16安装hive(一)
  16. jdt 解析java语句,利用JDT 回分析java 源代码
  17. 【贪心策略】区间选点问题
  18. python画一个点_python中画散点图
  19. Spring三大核心思想学习笔记
  20. Java初学者入门简介

热门文章

  1. 引用 病毒是怎么命名的?教你认识病毒命名规则
  2. JDK源码系列(3)-String
  3. spring data elasticsearch 对应 elasticsearch 版本
  4. Backpack II 0-1背包
  5. java 轻量级同步volatile关键字简介与可见性有序性与synchronized区别 多线程中篇(十二)...
  6. React 快速上手 - 目录索引
  7. [李景山php]每天TP5-20161225|thinkphp5-Console.php-2
  8. apache 2许可证_如何理解Apache 2专利许可
  9. 2017 开源软件排行_2017年开源大会精选
  10. open vswitch_Linux Foundation采用Open vSwitch,定义了“开放”和更多开源新闻