方法 heappush heappop heappushpop heapreplace heapify merge nlargest nsmallest
  • 最小堆封装
# 最小堆封装 from heapq import * import pprint class MinHeap: def __init__(self, iterable): self._iteralbe = [] self._max = 1000 self.linearpush(iterable) # 添加 def push(self, item): heappush(self._iteralbe, item) # 弹出 def pop(self): res = None try: res = heappop(self._iteralbe) except Exception as e: pprint.pprint(e) return res # 一个组合动作,先添加后弹出 def pushpop(self, item): res = None try: res = heappushpop(self._iteralbe, item) except Exception as e: pprint.pprint(e) return res # 一个组合动作,先弹出再添加 def replace(self, item): res = None try: res = heapreplace(self._iteralbe, item) except Exception as e: pprint.pprint(e) return res # 线性将列表加入到堆中,并且将原来的列表设置成堆 def linearpush(self, iterable): for it in iterable: self._iteralbe.append(it) heapify(self._iteralbe) # 将所有列表合并到堆中 def mergeAll(self, *iterables): arrs = [sorted(x) for x in iterables] arrs.append(self._iteralbe) self._iteralbe = list(merge(*tuple(arrs))) # 返回n个最大值 def nlagrge(self, n): if n == 1: return max(self._iteralbe) l = len(self._iteralbe) if l != 0: if l < self._max: return nlargest(n, self._iteralbe) else: return sorted(self._iteralbe, reversed=True)[:n] return None # 返回n个最小值 def nsmall(self, n): if n == 1: return self.getMin() l = len(self._iteralbe) if l != 0: if l < self._max: return nsmallest(n, self._iteralbe) else: return sorted(self._iteralbe)[:n] return None # 返回最小值 def getMin(self): if len(self._iteralbe) == 0: return None else: return self._iteralbe[0] a = [10, 2, 9, 4, 3, 5, 8, 6, 7, 1] heap = MinHeap(a) print("最小值是 {0}".format(heap.getMin())) print("先添加后弹出是 {0}".format(heap.pushpop(0))) print("先弹出后添加是 {0}".format(heap.replace(0))) print("最小值是 {0}".format(heap.pop())) print("前20个最大值是 {0}".format(heap.nlagrge(20))) print("前2个最小值是 {0}".format(heap.nsmall(2))) heap.mergeAll([8, 2, 4], [9, 10, -1]) print("合并之后的最小值是 {0}".format(heap.getMin()))

相关文章:

  • 2022-03-09
  • 2022-03-04
  • 2021-11-11
  • 2021-09-15
  • 2021-10-15
  • 2021-05-17
  • 2021-12-07
猜你喜欢
  • 2022-02-18
  • 2021-06-08
  • 2022-12-23
  • 2021-10-24
  • 2021-04-19
  • 2022-02-01
相关资源
相似解决方案