边工作边刷题:70天一遍leetcode: day 95

Merge two/k Sorted List

要点:除了brute force,还有三种方法:

  • PriorityQueue:这个就一个个list node push到q里,q的size是k,所有每次某个node出q,把下一个(如果存在)也push进来。
  • 递归:先做左右两边,然后递归回来正确的位置merge
  • iteration: 要点就是step len作outer loop,inner loop以step为步长X2循环两两merge
  • 2、3都是保证在数组相应的有效位置存相应的list

brute force的time complexity是O(nkk):如果依次merge,那么总的time为n+2n+3n+...+kn,而上面三种方法都是O(nklgk)

# 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
        """
   
原文地址:https://www.cnblogs.com/absolute/p/5983275.html