`

Merge k Sorted Lists

阅读更多
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Merge k个有序链表,之前做过一道题目是merge两个有序的链表,这里我们用分治的思想,用归并排序解决。先将k个链表递归的分为两部分,直到剩下两个链表,然后将两个链表合并起来。因为有k个list,假设每个list中有n个元素,那么时间复杂度为O(nk*logk). 代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        if(lists == null || lists.length == 0) return null;
        return helper(0, lists.length - 1, lists);
    }
    
    private ListNode helper(int l, int r, ListNode[] lists) {
        if(l < r) {
            int m = l + (r - l) / 2;
            return merge(helper(l, m, lists), helper(m + 1, r, lists));
        }
        return lists[l];
    }
    private ListNode merge(ListNode l1, ListNode l2) {
        if(l1 == null) return l2;
        if(l2 == null) return l1;
        ListNode helper = null;
        if(l1.val > l2.val) {
            helper = l2;
            helper.next = merge(l1, l2.next);
        } else {
            helper = l1;
            helper.next = merge(l1.next, l2);
        }
        return helper;
    }
}
分享到:
评论

相关推荐

    mergeksorted.cs

    Merge k Sorted Lists 给定k个有序数组并将其合并成1个有序数组, 代码采用C#编写

    LeetCode Merge 2 Sorted Lists解决方案

    LeetCode Merge 2 Sorted Lists解决方案详解 Merge 2 Sorted Lists是LeetCode上的一个经典算法题目,旨在考察程序员对链表的操作和排序算法的掌握程度。下面对该题目的解决方案进行详细的分析和解释。 问题描述 ...

    程序员面试宝典LeetCode刷题手册

    第四章 Leetcode 题解 1. Two Sum 2. Add Two Numbers 3. Longest Substring Without Repeating Characters ...23. Merge k Sorted Lists 24. Swap Nodes in Pairs 25. Reverse Nodes in k-Group 26. Remove Dupli

    c语言-leetcode 0023-merge-k-sorted-lists.zip

    c c语言_leetcode 0023_merge_k_sorted_lists.zip

    leetcode中文版-LeetCode:力码

    21.Merge Two Sorted Lists LeetCode 23.Merge k Sorted Lists(solve1) LeetCode 23.Merge k Sorted Lists(solve2) LeetCode 86.Partition List LeetCode 92.Reverse Linked List II LeetCode 138.Copy List with ...

    js-leetcode题解之23-merge-k-sorted-lists.js

    js js_leetcode题解之23-merge-k-sorted-lists.js

    c语言-c语言编程基础之leetcode题解第23题合并K个升序链表.zip

    本题来自著名的在线编程挑战平台LeetCode,题号为第23题,名为“Merge K Sorted Lists”(合并K个升序链表)。这是一道典型的数据结构与算法题目,主要考察的是链表操作和排序技巧。 链表是计算机科学中常用的一种...

    Leetcode book刷题必备

    23. Merge K Sorted Lists:合并 k 个排序链表。 24. Copy List with Random Pointer:复制带有随机指针的链表。 【二叉树】 25. Validate Binary Search Tree:验证二叉搜索树。 26. Maximum Depth of Binary Tree...

    lrucacheleetcode-leetcode-journal:记录所有LeetCode挑战的存储库

    lru缓存leetcode 力扣日记 欢迎来到我的 LeetCode 期刊库。 我的每个问题都将包括一个初始计划...k Sorted Lists (Hard) 31. Next Permutation (Medium) 34. Find First and Last Position of Element in Sorted Arr

    leetcode java

    - 有难度的链表题目则要求合并K个有序链表(Merge K Sorted Lists)、复制带有随机指针的链表(Copy List with Random Pointer)。 **二叉树(Binary Tree)** 二叉树是另一个重要的数据结构。LeetCode的题目涵盖了...

    2、DFS、回溯、分治法必练题(含答案).pdf

    * Merge k Sorted Lists:该题目要求将 k 个排序列表合并成一个排序列表。解决该题目需要使用分治法,递归地合并每两个列表,然后逐步合并,直到合并所有列表。 * Different Ways to Add Parentheses:该题目要求...

    c语言-leetcode 0021-merge-two-sorted-lists.zip

    c c语言_leetcode 0021_merge_two_sorted_lists.zip

    leetcode分类-leetcode:leetcode问题的代码

    leetcode 分类leetcode 问题分类 leetcode代码仓库,我的解题思路写在我的博客里: leetcode 代码库,我博客上的解题思路: mkdir 列表: 大批 #1:Two Sum #4:Median ...Sorted ...#23:Merge k Sorted Lists

    js-leetcode题解之21-merge-two-sorted-lists.js

    js js_leetcode题解之21-merge-two-sorted-lists.js

    C语言-leetcode题解之21-merge-two-sorted-lists.c

    c语言入门 C语言_leetcode题解之21-merge-two-sorted-lists.c

    小象学院2020 刷题班 3.2-4.171

    10. **合并 k 个排序链表**(Merge k Sorted Lists) - 知识点:链表,优先队列 - 解题策略:创建一个最小堆,将所有链表的头结点放入堆中,每次取出堆顶元素(即当前最小值)并将其后继节点插入堆中,直至堆为空...

    _leetcode-python.pdf

    - Merge k Sorted Lists: 合并k个排序链表。 - Swap Nodes in Pairs / Reverse Nodes in k-Group: 这两个问题涉及到在链表中按特定规则交换节点或反转节点组。 - Remove Duplicates from Sorted Array / Remove ...

Global site tag (gtag.js) - Google Analytics