美文网首页
leetcode023-合并k个有序链表

leetcode023-合并k个有序链表

作者: 陆阳226 | 来源:发表于2020-05-04 21:06 被阅读0次

问题描述

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

示例:

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

解答

方案1:根据合并两个有序链表的方案,可以遍历k个有序链表,将其依次合并起来
思路很清晰,但执行起来很慢

public static ListNode solution(ListNode[] lists) {
    ListNode ans = null;
    for (int i = 0; i < lists.length; i++) {
        ans = MergeTwoSortedList(ans, lists[i]);
    }
    return ans;
}

// 合并两个有序链表
public static ListNode MergeTwoSortedList(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(-1);
    ListNode tail = dummy;
    while (l1 != null && l2 != null) {
        if (l1.val > l2.val) {
            tail.next = l2;
            l2 = l2.next;
        } else {
            tail.next = l1;
            l1 = l1.next;
        }
        tail = tail.next;
    }
    tail.next = l1 == null ? l2 : l1;
    return dummy.next;
}

方案2:分治合并,将链表两两合并直到只剩一个链表

public static ListNode solution1(ListNode[] lists) {
    if (lists == null || lists.length == 0) {
        return null;
    }
    int len = lists.length;
    int left = 0;
    int right = len - 1;
    // 总的循环次数为right从len-1到1
    for (int i = 0; i < len - 1; i++) {
        lists[left] = MergeTwoSortedList(lists[left], lists[right]);
        left++;
        right--;
        if (left >= right) {
            left = 0;
        }
    }
    return lists[0];
}

相关文章

  • leetcode023-合并k个有序链表

    问题描述 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 解答 方案1:根据合并两...

  • 2022-02-23 链表专栏

    链表基础 类别 1、合并两个有序链表2、合并 k 个有序链表3、寻找单链表的倒数第 k 个节点4、寻找单链表的中点...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

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

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

  • LeetCode 专题 :分治算法

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

  • 链表操作

    合并2个有序链表 合并k个有序链表 这俩题挺好的,既考察了合并,又考察了递归与分治。 删除倒数第k个节点 思路到没...

  • 06-17:刷题总结

    1、合并k个有序链表 https://leetcode-cn.com/problems/merge-k-sorte...

  • 合并k个有序链表

    题目(来自力扣题库) 思路1 (比较笨的解法) 将所有节点添加到一个数组中 将数组的节点从小到大排序 从数组中从小...

  • 合并K个有序链表

    题目:合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 思路: 把每个链表得头放进小...

  • 合并k个有序链表

    23. 合并K个排序链表 1.想法 不能每一个都进行比较那么比较合适是的归并排序每次都两两合并,和归并排序的流程一...

网友评论

      本文标题:leetcode023-合并k个有序链表

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