zoukankan      html  css  js  c++  java
  • LeetCode 23. 合并K个排序链表(Merge k Sorted Lists)

    题目描述

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

    示例:

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

    解题思路

    利用分治的思想,划分k个排序链表为两半,递归的合并两部分中的链表。对于单个链表直接返回,对于两个链表调用merge函数,返回合并好的排序链表。

    代码

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* mergeKLists(vector<ListNode*>& lists) {
    12         int mid = lists.size() / 2;
    13         ListNode* l1 = mergeK(lists, 0, mid - 1);
    14         ListNode* l2 = mergeK(lists, mid, lists.size() - 1);
    15         return merge(l1, l2);
    16     }
    17     ListNode* mergeK(vector<ListNode*>& lists, int start, int end) {
    18         if(start == end) return lists[start];
    19         else if(start < end){
    20             int mid = (start + end) / 2;
    21             ListNode* l1 = mergeK(lists, start, mid);
    22             ListNode* l2 = mergeK(lists, mid + 1, end);
    23             return merge(l1, l2);
    24         }
    25         else return NULL;
    26     }
    27     ListNode* merge(ListNode* l1, ListNode* l2){
    28         if(l1 == NULL) return l2;
    29         if(l2 == NULL) return l1;
    30         if(l1->val > l2->val) return merge(l2, l1);
    31         ListNode* head = l1;
    32         while(l2 && l1->next){
    33             if(l1->next->val > l2->val){
    34                 ListNode* next = l2->next;
    35                 l2->next = l1->next;
    36                 l1->next = l2;
    37                 l2 = next;
    38             }
    39             l1 = l1->next;
    40         }
    41         if(l2) l1->next = l2;
    42         return head;
    43     }
    44 };
  • 相关阅读:
    ES6标准入门 第一章:简介
    vue调试工具之 vue-devtools的安装
    vue 高德地图之玩转周边
    vue-动手做个选择城市
    js 高级算法
    (转)预处器的对比——Sass、LESS和Stylus
    windows下安装mongodb以及node.js连接mongodb
    vue组件(将页面公用的头部组件化)
    浅谈移动端rem的用法
    vue 调用高德地图
  • 原文地址:https://www.cnblogs.com/wmx24/p/9559446.html
Copyright © 2011-2022 走看看