6.22 - hard - 3

23. Merge k Sorted Lists
用heap可以直接做出来。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def mergeKLists(self, lists):
        """
        :type lists: List[ListNode]
        :rtype: ListNode
        """
        # 这题的第一直觉用heap
        dummyhead = ListNode(0)
        head = dummyhead
        heap = []
        
        #初始化
        for i in range(len(lists)):
            if lists[i]:
                heapq.heappush(heap, (lists[i].val, lists[i], i))
                lists[i] = lists[i].next

        # 循环直到heap为空
        while heap:
            _, node, i = heapq.heappop(heap)
            head.next = node
            head = head.next
            if lists[i]:
                heapq.heappush(heap, (lists[i].val, lists[i], i))
                lists[i] = lists[i].next
            
        
        return dummyhead.next
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 18,127评论 2 36
  • //leetcode中还有花样链表题,这里几个例子,冰山一角 求单链表中结点的个数----时间复杂度O(n)这是最...
    暗黑破坏球嘿哈阅读 5,419评论 0 6
  • Heap in python Heap,即堆,也就是优先队列。我们可以在这里找到[]维基百科](https://e...
    英武阅读 7,739评论 0 51
  • 堆排序的时间复杂度与归并排序相同为O(nlg n),空间复杂度与插入排序相同为O(1)。堆这种数据结构还用于优先队...
    Nautilus1阅读 4,449评论 1 0