0

为什么 heappush 采用 3 个参数 arr[i].data、i 和 arr[i]。为什么取i为参数 一般只取一个参数 是合并k个排序的链表的代码

def mergeKLists(arr,K):
# code here
# return head of merged list
    heap = []
    head = tail = Node(0)
    for i in range(K):
        heapq.heappush(heap,(arr[i].data,i,arr[i]))

    while heap:
        node = heapq.heappop(heap)
        node = node[2]
        tail.next = node
        tail = tail.next
        if node.next:
            i += 1
            heapq.heappush(heap,(node.next.data,i,node.next))
    return head.next
4

2 回答 2

0

实际上,当元组作为输入给出时,比较器函数将采用第一个属性进行比较,如果它们相同,它将转到下一个属性,依此类推,如果两个值相同,它将抛出“TypeError:不可排序的类型:Node()< Node()" 错误所以为了避免这种情况,第二个参数i在元组中是唯一的

于 2021-03-18T10:19:19.343 回答
0

它没有。在您的代码中,您将一个元组推送到堆中,但这不是必需的。例如:

import heapq

h = [1, 2, 3, 4]
heapq.heapify(h)

v = heapq.heappop(h) # Returns 1

heapq.heappush(h, 6) # Now h = [2, 3, 4, 6]
于 2021-03-18T10:10:39.950 回答