1. 合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {{if(!l1 || !l2){return l1 ? l1 : l2;}ListNode head(0);ListNode* tail = &head;ListNode* a = l1;ListNode* b = l2;while(a&&b){if(a->val > b->val){tail->next = b;tail = tail->next;b = b->next;}else{tail->next = a;tail = tail->next;a = a->next;}}tail->next = a ? a : b;return head.next;}
  1. 合并K个排序链表
    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

示例:

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

方法一:分治合并

ListNode* mergeKLists(vector<ListNode*>& lists) {//分治合并  递归ListNode* head = merge(lists, 0, lists.size()-1);return head;}ListNode* merge(vector<ListNode*>&lists, int l, int r){if(l == r){return lists[l];}if(l > r){return nullptr;}int mid = (l+r)>>1;return mergetwo(merge(lists, l, mid), merge(lists, mid+1, r));}ListNode* mergetwo(ListNode* l, ListNode* r){if(!l || !r){return l ? l : r;}ListNode head(0);ListNode* tail = &head;ListNode* a = l;ListNode* b = r;while(a&&b){if(a->val > b->val){tail->next = b;tail = tail->next;b = b->next;}else{tail->next = a;tail = tail->next;a = a->next;}}tail->next = a ? a : b;return head.next;}

方法二:使用优先对列,每层的最小值,中找最小的取出。

//     struct VecNode{
//         int val;
//         ListNode * p;
//         bool operator < (const VecNode& rhs) const {
//             return val > rhs.val;             //小根堆
//         }
//     };
//     ListNode* mergeKLists(vector<ListNode*>& lists) {
//         //使用优先队列来合并
//         priority_queue<VecNode> que;
//         for(int i = 0; i < lists.size(); ++i)
//         {
//             if(lists[i])
//             que.push({lists[i]->val, lists[i]});
//         }//         ListNode head(0);
//         ListNode * tail = &head;//         while(!que.empty())
//         {
//             // cout << "s"<<endl;
//             auto p = que.top();
//             que.pop();
//             tail->next = p.p;
//             tail = tail->next;
//             if(p.p->next)
//             {
//                 que.push({p.p->next->val, p.p->next});
//             }//         }//         return head.next;
//     }

leetcode 合并数组相关推荐

  1. LeetCode——合并两个有序数组

    LeetCode--合并两个有序数组 题目描述: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nu ...

  2. [CareerCup] 11.1 Merge Arrays 合并数组

    11.1 You are given two sorted arrays, A and B, where A has a large enough buffer at the end to hold ...

  3. 弟中弟的Leetcode总结——数组类(五)

    弟中弟的Leetcode总结--数组类(五) 题目描述 Remove Duplicates from Sorted Array Given a sorted array nums, remove th ...

  4. Numpy 多维数组变为常量、增加维度、元素复制、按块复制、横轴竖轴合并数组、连接数组

    1. flatten NumPy 的 flatten 函数也有改变 shape 的能力,它将高维数组变为向量.但是,它会发生数组复制行为. In [57]: m = np.random.randint ...

  5. php数组合并如何不覆盖,php如何实现合并数组并且不覆盖重复值

    php合并数组不覆盖的实现方法:首先创建一个PHP示例文件:然后定义两组数组:接着通过"$form_data1 + $form_data2;"方法合并数组:最后输出合并后的值即可. ...

  6. 如何在Swift中串联或合并数组?

    本文翻译自:How do I concatenate or merge arrays in Swift? If there are two arrays created in swift like t ...

  7. php 合并数组 +和array_merge的区别

    主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面 ...

  8. PHP合并数组array_merge函数运算符加号与的区别

    "+"运算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多 ...

  9. php数组只保留键值,php合并数组并保留键值的实现方法

    php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 array array_merge ( array $array1 [, array $... ...

最新文章

  1. shrio初体验(2)Realm
  2. Python 类的属性与实例属性
  3. Django(part41)--中间键Middleware
  4. 小程序 报错 err code: 40029, errmsg: 'invalid code, hints: [ req_id: JhIay6yFe-XN5A3 ]'
  5. python3.4安装pygame_python 3.4.3 安装pygame
  6. [转载] python下载安装教程
  7. CentOS 6.x通过yum安装php7.1及相关环境
  8. Python3调用新浪微博API抓取数据
  9. 一键批量检测微信是否被好友删除
  10. Topaz Mask AI 人工智能抠图插件
  11. 标书制作,全流程视频教程大全
  12. mysql退出安全模式_MySQL数据库之mysql 解除安全模式
  13. 测试老鸟分享:掌握2项技能,轻松拿到软件测试工程师offer...
  14. 没有mysql不能设置root密码怎么办_无法给MySQL root用户修改密码的解决方法
  15. 软件破解简单示例演示
  16. 为什么canal数据只推送到kafka topic的其中一个分区中
  17. #今日论文推荐# 斯坦福开发微型机器人,改善靶向给药技术
  18. vue 点击打开pdf
  19. Java并发体系-第二阶段-锁与同步-[1]-【万字文系列】
  20. CMMI2.0是什么?

热门文章

  1. python编写交互界面查分_python小习题:查分数 - 李金龙
  2. Chaarshanbegaan at Cafebazaar 水题
  3. 中文信息处理——分词评价程序(计算分词结果的准确率,召回率,F测度)
  4. 文具订购(【CCF】NOI Online能力测试 入门组第一题)
  5. vscode-background插件“卸载“以及“禁用“失效
  6. ROS与Matlab协同进行运动控制
  7. 定制适用于ARM平台的Ubuntu rootfs(根文件系统)
  8. 【javajni】jni入门篇
  9. 火星人谚语系列之八:少读书,多思考
  10. Django Rest Framework源码剖析(七)-----分页