美文网首页算法学习打卡计划
leetcode第二十三题 —— 合并K个排序链表

leetcode第二十三题 —— 合并K个排序链表

作者: 不分享的知识毫无意义 | 来源:发表于2019-12-27 15:17 被阅读0次

1.题目

原题

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

例子

[1->4->5,
  1->3->4,
  2->6]
输出: 1->1->2->3->4->4->5->6

2.解析

这道题实在排序两个有序链表上的升级。
其实思路很简单,只需要依次合并列表中的两个链表,然后合并后的链表跟下一个链表合并,直到合并完成即可,但是这种方法效率比较低,提交以后只打败了5%的提交者。
于是笔者采用了分治策略,降低算法的复杂度,但效率提升不高,大约击败20%的提交者。分治策略,用到了递归,各位看官要理解递归的输出。

3.python代码

class Solution:
    def mergeKLists(self, lists):
        if not lists:
            return None
        if len(lists) == 1:
            return lists[0]
        mid = len(lists) // 2
        left = len(lists) % 2
        llists = lists[0: mid]
        rlists = lists[mid:]
        l = self.mergeKLists(llists)
        r = self.mergeKLists(rlists)
        f = self.mergeTwoLists(l, r)
        return f

    def mergeTwoLists(self, list1, list2):
        head = ListNode(0)
        newl = head
        while list1 is not None or list2 is not None:#根据链表的特点
            if list1 is None:
                head.next = list2
                break
            if list2 is None:
                head.next = list1
                break
            if list1.val < list2.val:
                head.next = list1
                list1 = list1.next
            else:
                head.next = list2
                list2 = list2.next
            head = head.next
        return newl.next

相关文章

  • LeetCode 专题 :分治算法

    LeetCode 第 23 题:归并多个有序链表 传送门:23. 合并K个排序链表。 合并 k 个排序链表,返回合...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • LeetCode-23-合并K个有序链表

    LeetCode-23-合并K个有序链表 题目 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂...

  • LeetCode 上最难的链表算法题,没有之一!

    题目来源于 LeetCode 第 23 号问题:合并 K 个排序链表。 该题在 LeetCode 官网上有关于链表...

  • ARTS第五周2020620

    Algorithm 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

  • 23. 合并K个排序链表

    23. 合并K个排序链表 题目链接:https://leetcode-cn.com/problems/merge-...

  • 合并K个排序链表

    合并K个排序链表 题目描述 基本思路 这道题属于双链表合并的进阶。理解这道题首先需要了解有序双链表合并的解法。 已...

  • 合并K个排序链表【LeetCode:23】

    题目: 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: ...

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • LeetCode:合并K个排序链表

    合并K个排序链表(困难) 题目叙述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例...

网友评论

    本文标题:leetcode第二十三题 —— 合并K个排序链表

    本文链接:https://www.haomeiwen.com/subject/urscoctx.html