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

堆71-73

71. 数组中的第K个最大元素class Solution(object): def partition(self, nums, i, j): if i j: key nums[i] while i j: while i j and nums[j] key: j - 1 if i j: nums[i] nums[j] i 1 while i j and nums[i] key: i 1 if i j: nums[j] nums[i] j - 1 nums[i] key return i def findKthLargest(self, nums, k): left, right 0, len(nums) - 1 target len(nums) - k while left right: pivot_idx self.partition(nums, left, right) if pivot_idx target: return nums[pivot_idx] elif pivot_idx target: left pivot_idx 1 else: right pivot_idx - 1class Solution: def minHeapify(self, a, i, heapSize): 向下调整维护最小堆性质 while True: l i * 2 1 r i * 2 2 smallest i if l heapSize and a[l] a[smallest]: smallest l if r heapSize and a[r] a[smallest]: smallest r if smallest i: break a[i], a[smallest] a[smallest], a[i] i smallest def buildMinHeap(self, a, heapSize): 从最后一个非叶子节点开始建堆 for i in range(heapSize // 2 - 1, -1, -1): self.minHeapify(a, i, heapSize) def findKthLargest(self, nums, k): # 取前 k 个元素建小根堆 heap nums[:k] self.buildMinHeap(heap, k) # 遍历剩余元素 for i in range(k, len(nums)): if nums[i] heap[0]: # 只处理比堆顶大的元素 heap[0] nums[i] self.minHeapify(heap, 0, k) return heap[0]72. 前 K 个高频元素给你一个整数数组nums和一个整数k请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。class Solution(object): def minHeapify(self, heap, i, heapSize): while True: l i * 2 1 r i * 2 2 smallest i if l heapSize and heap[l][0] heap[smallest][0]: smallest l if r heapSize and heap[r][0] heap[smallest][0]: smallest r if smallest i: break heap[i], heap[smallest] heap[smallest], heap[i] i smallest def buildMinHeap(self, heap, heapSize): for i in range(heapSize // 2 - 1, -1, -1): self.minHeapify(heap, i, heapSize) def topKFrequent(self, nums, k): freq {} for x in nums: freq[x] freq.get(x, 0) 1 items list(freq.items()) heap [(freq, num) for num, freq in items[:k]] self.buildMinHeap(heap, k) for num, f in items[k:]: if f heap[0][0]: heap[0] (f, num) self.minHeapify(heap, 0, k) return [num for _, num in heap]73. 数据流的中位数import heapq class MedianFinder: def __init__(self): self.left [] self.right [] def addNum(self, num): if not self.left or num -self.left[0]: heapq.heappush(self.left, -num) else: heapq.heappush(self.right, num) if len(self.left) len(self.right) 1: moved -heapq.heappop(self.left) heapq.heappush(self.right, moved) elif len(self.right) len(self.left): moved heapq.heappop(self.right) heapq.heappush(self.left, -moved) def findMedian(self) : if len(self.left) len(self.right): return -self.left[0] else: return (-self.left[0] self.right[0]) / 2.0
http://www.rkmt.cn/news/1299176.html

相关文章:

  • 面向对象程序设计三次迭代作业完整总结与分析
  • 2025届毕业生推荐的六大AI学术工具解析与推荐
  • 从零构建RAG系统:基于LLM的检索增强生成实战指南
  • 合肥半导体产业人才需求解析:嵌入式、IC验证与设计岗位技术栈与薪资指南
  • 基于LLM与RAG构建智能问答系统:架构、实现与优化指南
  • 从仿真到控制:基于VRX与XTDrone的多无人艇协同算法验证实战
  • 3分钟搞定Figma中文汉化:设计师的终极效率秘籍
  • 解锁音乐自由:3分钟让QQ音乐加密文件在任何设备播放
  • 学生综合素质评价系统设计实现【附程序】
  • VIBESRAILS:基于Rails的音视频智能分析后端框架实践指南
  • ADI SHARC DSP新旗舰ADSP-SC589实战:从零搭建开发环境到首个程序运行
  • 神经网络建筑负荷预测与供暖优化【附程序】
  • 开源AI助手召唤器Summon-App:全局热键集成多模型,打造无缝工作流
  • 工业物联网通信协议AMTP开源实现amtp-openclaw深度解析与实践
  • VTube Studio完整指南:从零开始打造你的虚拟主播形象
  • 如何用FanControl快速解决电脑风扇噪音问题:完整免费指南
  • 解密Jsxer:如何高效反编译Adobe JSXBIN二进制脚本
  • 企业信息采集神器:10分钟掌握天眼查企查查双平台爬虫
  • Python金融数据获取利器:b3-data-fetcher项目深度解析与应用实践
  • Herdr:基于配置即代码的轻量级HTTP请求模拟与调试工具详解
  • ESP-NOW协议与CircuitPython实战:构建低功耗物联网无线通信网络
  • 多脉冲重复频率解速度模糊:原理、仿真与MATLAB实现
  • 大学正在悄悄 “僵尸化”,AI正在毁掉高等教育内核?!
  • 告别复杂推导!用PyTorch 2.0手把手实现Reptile算法(附完整代码与对比实验)
  • OpenWRT iStore应用商店终极安装指南:从安装失败到完美运行
  • 开发者如何构建个人技能库:从知识碎片到可复用模块的工程实践
  • 3分钟掌握抖音无水印下载:终极视频保存方案
  • 基于Node.js与OpenAI API构建Twitch直播AI聊天机器人全流程指南
  • AI智能体技能化开发:从函数抽象到编排组合的工程实践
  • 基于Node.js与TypeScript构建现代化自托管笔记应用后端