数据结构-堆
liubeiandcaocao
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 49. 丑数 小根堆的用法,类似BFS
题意,丑数定义为因子只有2,3,5;1也是丑数,给定n,返回第n个丑数用小根堆,从小到大的输出丑数class Solution: def nthUglyNumber(self, n: int) -> int:#方法一 小根堆,类似BFS的思路,添加一个,考虑当前元素 v = {1} q = [1] res = 0 for i in range(n): res = heapq.heappop(q)原创 2020-08-04 15:59:11 · 104 阅读 · 0 评论 -
347. 前 K 个高频元素 大根堆
题意:返回的是高频元素的值 nums = [1,1,1,2,2,3], k = 2输出[1,2],1,2这两个元素频率最高前k个大的小的,第k个大的小的 ,都用大根堆小根堆来做。相对于排序,时间复杂度更低利用heapq小根堆的包import heapqclass Solution: def topKFrequent(self,nums,k): heap_max=[]...原创 2020-03-31 23:03:23 · 135 阅读 · 0 评论 -
有序矩阵中第K小的元素,与数组中的第K个最大元素算法思考
使用大根堆,第K小的元素,保存所有元素于大根堆,大根堆的根节点为最大值;pop根节点,即将最大值删除,则剩下的k个元素中,首元素就是就是倒数第K大,即第K小;数组中的第K个最大元素用的是小根堆,有序矩阵中第K小的元素用的是大根堆,思考一下这种算法?这道题让我们求有序矩阵中第K小的元素,这道题的难点在于数组并不是蛇形有序的,意思是当前行的最后一个元素并不一定会小于下一行的首元素,所以我们并不能直接定位第K小的元素,所以只能另辟蹊径。先来看一种利用堆的方法,我们使用一个最大堆,然后遍历数组每一个元素,将其.原创 2020-05-30 21:32:47 · 209 阅读 · 0 评论 -
数据流中的中位数;大根堆和小根堆的使用方法教学案例;剑指offer40 最小的k个数也是大根堆实现
最小堆最大堆,给定未排序的数组,找到中位数rom heapq import *class MedianFinder: def __init__(self): self.A = [] # 小顶堆,保存较大的一半 self.B = [] # 大顶堆,保存较小的一半 def addNum(self, num: int) -> None: if len(self.A) != len(self.B): heappush(原创 2020-05-30 20:15:30 · 138 阅读 · 0 评论 -
数组中的第K个最大元素
未排序的数组,第K个最大元素,使用小根堆实现,小根堆的定义就是根节点是最小值class Solution(object): def findKthLargest(self, nums, k): def shift(i,k): while True: t = i if (i*2+1)<k and nums[i]>nums[2*i+1]: #左子节点存在,且大于根节点,则交换,使根节点为最小值原创 2020-05-29 23:24:27 · 114 阅读 · 0 评论