边工作边刷题: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
"""