美文网首页
牛客网高频算法题系列-BM5-合并k个已排序的链表

牛客网高频算法题系列-BM5-合并k个已排序的链表

作者: 醉舞经阁半卷书 | 来源:发表于2022-05-29 17:19 被阅读0次

    牛客网高频算法题系列-BM5-合并k个已排序的链表

    题目描述

    合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

    原题目见:BM5 合并k个已排序的链表

    解法一:分治法

    分治法,可以将大问题分解成小问题,然后继续分解成最小的子问题并解决之。

    具体处理过程如下,将k个链表分解成2部分处理,递归处理这2部分,并调用 BM4 合并两个排序的链表 中的方法将2个合并好的链表进行合并,最小的子问题的条件是:

    • 没有待合并的链表,直接返回空。
    • 如果只有一个链表,则不需要合并,直接返回该链表。

    如果不满足,则需要继续分解并递归处理。

    说明:BM4 合并两个排序的链表,请参考 牛客网高频算法题系列-BM4-合并两个排序的链表。

    代码

    import com.google.common.collect.Lists;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Bm005 {
        /**
         * 分治法
         *
         * @param lists
         * @return
         */
        public static ListNode mergeKLists(List<ListNode> lists) {
            // 如果没有待合并的链表,直接返回空
            if (lists == null || lists.size() == 0) {
                return null;
            }
            // 如果只有一个链表,则不需要合并,直接返回该链表
            if (lists.size() == 1) {
                return lists.get(0);
            }
            int left = 0, right = lists.size();
            int mid = (left + right) / 2;
            // 递归调用当前方法将原有的链表集合分成2部分分别进行合并
            // 然后调用 BM4 合并两个排序的链表 中的方法将2个合并好的链表进行合并
            return Bm004.merge(mergeKLists(lists.subList(0, mid)), mergeKLists(lists.subList(mid, right)));
        }
    
        public static void main(String[] args) {
            ListNode listNode1 = ListNode.testCase3();
            System.out.println("链表一");
            ListNode.print(listNode1);
            ListNode listNode2 = ListNode.testCase4();
            System.out.println("链表二");
            ListNode.print(listNode2);
            ListNode listNode3 = new ListNode(7);
            System.out.println("链表三");
            ListNode.print(listNode3);
            ArrayList<ListNode> lists = Lists.newArrayList(listNode1, listNode2, listNode3);
            ListNode result = mergeKLists(lists);
            // 测试用例,期望输出: 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7
            System.out.println("合并后的链表");
            ListNode.print(result);
        }
    }
    

    1.01^{365} ≈ 37.7834343329
    0.99^{365} ≈ 0.02551796445
    相信坚持的力量!

    相关文章

      网友评论

          本文标题:牛客网高频算法题系列-BM5-合并k个已排序的链表

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