• python 合并k个有序链表


    from heapq import heappush, heappop
    
    
    class Solution:
        def mergeKLists(self, lists):
            q = []
            for i,head in enumerate(lists):
                if head:
                    heappush(q, (head.val, i, head))
    
            node = dummy = ListNode(0)
            while q:
                val, i, pop_node = heappop(q)
                print(val)
                node.next = ListNode(val)
                node = node.next
                next_node = pop_node.next
                if next_node:
                    heappush(q, (next_node.val, i, next_node))
            return dummy.next
    

      

     为啥有i???????????理由见后、

    另外PQ也有这个问题

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    import queue
    
    
    class Solution:
        def mergeKLists(self, lists: List[ListNode]) -> ListNode:
            q = queue.PriorityQueue()
            for i,head in enumerate(lists):
                if head:
                    q.put((head.val, i, head))
            
            node = dummy = ListNode(0)
            while not q.empty():
                val, i, pop_node = q.get()
                node.next = ListNode(val)
                node = node.next
                next_node = pop_node.next
                if next_node:
                    q.put((next_node.val, i, next_node))
            return dummy.next
    

      

    python 3 heappush Line 13: TypeError: '<' not supported between instances of 'ListNode' and 'ListNode'

    出现原因:

    @cbmbbz In the event that two or more of the lists have the same val, this code will error out since the queue module will compare the second element in the priority queue which is a ListNode object (and this is not a comparable type).

    To solve for this issue, I have stored (node.val, list_idx, node) to account for this edge case.

    from queue import PriorityQueue
    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution:
        def mergeKLists(self, lists):
            k = len(lists)
            q = PriorityQueue(maxsize=k)
            dummy = ListNode(None)
            curr = dummy
            for list_idx, node in enumerate(lists):
                if node: q.put((node.val, list_idx, node))
            while q.qsize() > 0:
                poped = q.get()
                curr.next, list_idx = poped[2], poped[1]
                curr = curr.next
                if curr.next: q.put((curr.next.val, list_idx, curr.next))
            return dummy.next
    
     
     
    48
     
    Show 4 replies
    Reply
    Share
    Report
    Read More

    Python3 env will get TypeError: '<' not supported between instances of 'ListNode' and 'ListNode'
    if there are duplicate values in the list. Works in Python env.

  • 相关阅读:
    jquery 删除cookie失效的解决方法
    SQL Server 抛出自定义异常,由C#程序俘获之并进行相应的处理
    SqlServer中的自增的ID的最后的值:
    Stream/Bytes[]/Image对象相互转化
    TextBox禁止复制粘贴和数字验证,小数验证,汉字验证
    扩展WPF的DataGrid按方向键移动焦点
    WPF 中获取DataGrid 模板列中控件的对像
    IIS设置文件 App_Offline.htm 网站维护
    IIS设置文件 Robots.txt 禁止爬虫
    js中的整除运算
  • 原文地址:https://www.cnblogs.com/bonelee/p/12379914.html
Copyright © 2020-2023  润新知