Пример #1
0
 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)
Пример #2
0
    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())
Пример #3
0
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()
Пример #4
0
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]