zoukankan      html  css  js  c++  java
  • 【LeetCode】23. 合并K个排序链表

    链接:

    https://leetcode-cn.com/problems/merge-k-sorted-lists

    描述:

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

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

    ListNode* mergeKLists(vector<ListNode*>& lists) {}

    简单题

    【LeetCode】21. 合并两个有序链表

    https://www.cnblogs.com/crazyBlogs/p/13164038.html

    思路:逐一合并

    用变量 (result) 表示已经合并的链表,
    循环遍历所有链表,将当前链表和 (result) 合并。

    C++

    展开后查看
    class Solution {
    public:
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            ListNode* result = NULL;
            for(ListNode* list: lists){
                result = merge2Lists(result, list);
            }
            return result;
        }
    };
    

    Java

    展开后查看
    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            ListNode result = null;
            for(ListNode list: lists){
                result = merge2Lists(result, list);
            }
            return result;
        }
    }
    

    思路:分治合并

    用分治法进行合并

    C++

    展开后查看
    class Solution {
    public:
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            if(lists.size() == 0){
                return NULL;
            }
            return merge(lists, 0, lists.size() - 1);
        }
        ListNode* merge(vector<ListNode*>&lists, int left, int right){
            if(left == right){
                return lists[left];
            }
            int mid = left + (right - left) / 2;
            ListNode* list1 = merge(lists, left, mid);
            ListNode* list2 = merge(lists, mid + 1, right);
            return merge2Lists(list1, list2);
        }
    }
    

    Java

    展开后查看
    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            if(lists.length == 0){
                return null;
            }
            return merge(lists, 0, lists.length - 1);
        }
        ListNode merge(ListNode[] lists, int left, int right){
            if(left == right){
                return lists[left];
            }
            int mid = left + (right - left) / 2;
            ListNode l1 = merge(lists, left, mid);
            ListNode l2 = merge(lists, mid + 1, right);
            return merge2Lists(l1, l2);
        }
    }
    
  • 相关阅读:
    go websocket
    go websocket 调试报错 request origin not allowed by Upgrader
    uniapp中使用阿里巴巴图标iconfont
    TS视频一
    ReactiveCocoa
    weak 的内部实现原理
    谈Objective-C block的实现
    基础面试总结
    理解 iOS 的内存管理
    URL Scheme
  • 原文地址:https://www.cnblogs.com/crazyBlogs/p/13153100.html
Copyright © 2011-2022 走看看