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
  • 相关阅读:
    repair table
    利用逻辑备份恢复部分库表
    Web框架理解
    BootStrape基础使用
    jQuery入门
    BOM操作
    DOM操作
    day12 css样式
    JavaScript基础
    day11 前端知识简单总结
  • 原文地址:https://www.cnblogs.com/geeksongs/p/14944883.html
Copyright © 2011-2022 走看看