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

小顶堆、大顶堆和Top-k问题

小顶堆初始化

import heapq# 无序的列表
nums = [3, 2, 5, 1, 4]# 将列表转换为堆
heapq.heapify(nums)# 输出结果
print(nums)  # 输出: [1, 2, 5, 3, 4],最小值 1 在堆顶

大顶堆初始化

import heapq# 实现最大堆的方法:将元素取负
nums = [3, 1, 4, 1, 5, 9, 2, 6, 5]# 构建最大堆
max_heap = [-num for num in nums]
heapq.heapify(max_heap)# 弹出最大值(负数的最小值就是最大值)
max_value = -heapq.heappop(max_heap)print(max_value)  # 输出: 9

Top-k问题

https://www.hello-algo.com/chapter_heap/top_k/#832

def top_k_heap(nums: list[int], k: int) -> list[int]:"""基于堆查找数组中最大的 k 个元素"""# 初始化小顶堆heap = []# 将数组的前 k 个元素入堆for i in range(k):heapq.heappush(heap, nums[i])# 从第 k+1 个元素开始,保持堆的长度为 kfor i in range(k, len(nums)):# 若当前元素大于堆顶元素,则将堆顶元素出堆、当前元素入堆if nums[i] > heap[0]:heapq.heappop(heap)heapq.heappush(heap, nums[i])return heap

力扣215. 数组中的第K个最大元素

import heapq
class Solution:def findKthLargest(self, nums: List[int], k: int) -> int:heap = []for i in range(k):heapq.heappush(heap, nums[i])for i in range(k, len(nums)):if nums[i] > heap[0]:heapq.heappop(heap)heapq.heappush(heap, nums[i])return heap[0]

http://www.mrgr.cn/news/53301.html

相关文章:

  • 一文搞懂模型倍率怎么计算的,以及模型分组倍率原理!
  • 【JVM】—深入理解ZGC回收器—背景概念回收流程
  • EFFPLMN(Forbidden PLMNs)
  • 中介者模式 (Mediator Pattern)
  • Makefile文件编写
  • 「C++」类和对象最终回
  • Java之数组详解
  • js简单基础笔记
  • Python进阶知识2
  • 力扣10.18
  • 面试题:Redis(八)
  • MuSig2(一种多签名方案,具有签名聚合的特性
  • 2024.10月18日- Vue2组件开发(3)
  • PatchEmbed
  • 输出所有可能的出栈顺序
  • java-uniapp小程序-引导关注公众号、判断用户是否关注公众号
  • 机器学习“捷径”:自动特征工程全面解析(附代码示例)
  • 数字图像处理:图像分割应用
  • Linux C-线程相关函数1
  • 抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果