def test_max_heap_has_max_at_top(self): maxHeap = MaxHeap() maxHeap.push(2) maxHeap.push(10) maxHeap.push(20) maxHeap.push(1) r = maxHeap.peek() self.assertEqual(20, maxHeap.peek()) self.assertEqual(r, 20)
def test_max_heap_max_is_retained(self): maxHeap = MaxHeap() maxHeap.push(7) maxHeap.push(4) maxHeap.push(10) maxHeap.push(6) maxHeap.push(5) self.assertEqual(10, maxHeap.peek()) maxHeap.remove(10) self.assertEqual(7, maxHeap.peek()) maxHeap.remove(6) self.assertEqual(7, maxHeap.peek())
class BuildingMap: def __init__(self): self.map = defaultdict(list) self.heap = MaxHeap() def put(self, height): self.heap.push(height) self.map[height].append(height) def remove(self, height): if height not in self.map: print(f'height {height} not in map') return n = self.map[height].pop() self.heap.remove(n) if len(self.map[height]) == 0: self.map.pop(height) def getMax(self): if self.heap.empty(): return 0 return self.heap.peek()
def find_k_smallest(a, k): h = MaxHeap() for i in range(len(a)): if i < k: h.push(a[i]) elif a[i] < h.peek(): popped = h.pop() h.push(a[i]) return h.getItems() h = [] heapq.heapify(h) for i in range(len(a)): if i < k: heapq.heappush(h, -a[i]) elif a[i] < -h[0]: heapq.heapreplace(h, -a[i]) return [-i for i in h]