【算法】合并K个升序链表

这道题主要考察的是归并排序,因为已经升序过了,更好理解了。

当然也可以采用分治的思路;或采用最小堆的思路;面试中校招同学写出一种即可,如果能全概览讲一下,就更加分了。

#####################################################

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

解题:

 // 最小堆 
    public static ListNode mergeKLists(ListNode[] lists) {
        int k = lists.length;
        ListNode dummyHead = new ListNode(0);
        ListNode tail = dummyHead;
        while (true) {
            ListNode minNode = null;
            int minPointer = -1;
            for (int i = 0; i < k; i++) {
                if (lists[i] == null) {
                    continue;
                }
                if (minNode == null || lists[i].val < minNode.val) {
                    minNode = lists[i];
                    minPointer = i;
                }
            }
            if (minPointer == -1) {
                break;
            }
            tail.next = minNode;
            tail = tail.next;
            lists[minPointer] = lists[minPointer].next;
        }
        return dummyHead.next;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        ListNode[] lists = new ListNode[]{
                new ListNode(1, new ListNode(4, new ListNode(5))),
                new ListNode(1, new ListNode(3, new ListNode(4))),
                new ListNode(2, new ListNode(6))
        };
        ListNode list = solution.mergeKLists(lists);
        ListNode.print(list);
    }

相关推荐

  1. 算法合并K升序

    2023-12-08 01:16:03       41 阅读
  2. LeetCode-23. 合并 K 升序

    2023-12-08 01:16:03       30 阅读
  3. LeetCode-23 合并 K 升序

    2023-12-08 01:16:03       42 阅读
  4. LeetCode 23 合并 K 升序

    2023-12-08 01:16:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 01:16:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 01:16:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 01:16:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 01:16:03       18 阅读

热门阅读

  1. Dynamo学习使用的网站

    2023-12-08 01:16:03       42 阅读
  2. 【NEON】学习资料汇总

    2023-12-08 01:16:03       43 阅读
  3. 【Centos8】配置网络镜像源

    2023-12-08 01:16:03       36 阅读
  4. golang实现函数yamlToStruct(infile,outFile)

    2023-12-08 01:16:03       34 阅读
  5. php爬虫规则与robots.txt讲解

    2023-12-08 01:16:03       32 阅读
  6. webpack配置scss loader

    2023-12-08 01:16:03       44 阅读
  7. 服务器,数据库服务器各指标怎么看?

    2023-12-08 01:16:03       38 阅读