zoukankan      html  css  js  c++  java
  • 【leetcode】23:合并k个生序链表

    这道题一看其实可以使用最大堆的方式来完成。使用最大堆来解决本题的时间复杂度为:o(mn*log(k)),这样虽然很巧妙,但是由于还乘上了logk的缘故时间反而慢了。因此我们可以直接通过直接对这个二维数组lists进行遍历,这样就可以得到一个sorted的数组。因此使用sort这个函数,也就是快速排序。因此整个过程的时间复杂度为O(nm*log(mn)),稍微比最大堆慢了一点。但是总体趋势是一样的。

    代码如下所示:

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def mergeKLists(self, lists: List[ListNode]) -> ListNode:
            #这题目一看其实可以用最大堆来做,但是由于时间复杂度是一样的,还不如直接对整个二位lists进行遍历
            one_list=[]
            i=0
            while i<len(lists):
                while lists[i]:
                    one_list.append(lists[i].val)
                    lists[i]=lists[i].next
                i+=1
    
            one_list=sorted(one_list)
            ret=ListNode(0)
            real_ret=ret
            i=0
            while i<len(one_list):
                ret.next=ListNode(one_list[i])
                ret=ret.next
                i+=1
    
            return real_ret.next
  • 相关阅读:
    &与&&的区别
    x^y=(x&~y)|(~x&y)证明
    a、b交换与比较
    x+y = ((x&y)<<1) + (x^y) 证明
    (x&y) + ((x^y)>>1)即x和y的算数平均值
    默认参数提升
    类型转换
    闲扯原码,补码和反码(转)
    C/C++中float和double的存储结构
    led设备驱动(s3c_led.c)
  • 原文地址:https://www.cnblogs.com/geeksongs/p/14944883.html
Copyright © 2011-2022 走看看