leetcode 合并数组
- 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
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;}
- 合并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 合并数组相关推荐
- LeetCode——合并两个有序数组
LeetCode--合并两个有序数组 题目描述: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nu ...
- [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 ...
- 弟中弟的Leetcode总结——数组类(五)
弟中弟的Leetcode总结--数组类(五) 题目描述 Remove Duplicates from Sorted Array Given a sorted array nums, remove th ...
- Numpy 多维数组变为常量、增加维度、元素复制、按块复制、横轴竖轴合并数组、连接数组
1. flatten NumPy 的 flatten 函数也有改变 shape 的能力,它将高维数组变为向量.但是,它会发生数组复制行为. In [57]: m = np.random.randint ...
- php数组合并如何不覆盖,php如何实现合并数组并且不覆盖重复值
php合并数组不覆盖的实现方法:首先创建一个PHP示例文件:然后定义两组数组:接着通过"$form_data1 + $form_data2;"方法合并数组:最后输出合并后的值即可. ...
- 如何在Swift中串联或合并数组?
本文翻译自:How do I concatenate or merge arrays in Swift? If there are two arrays created in swift like t ...
- php 合并数组 +和array_merge的区别
主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最终结果返回,而把后面 ...
- PHP合并数组array_merge函数运算符加号与的区别
"+"运算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多 ...
- php数组只保留键值,php合并数组并保留键值的实现方法
php合并数组,一般会使用array_merge方法. array_merge - 合并一个或多个数组 array array_merge ( array $array1 [, array $... ...
最新文章
- shrio初体验(2)Realm
- Python 类的属性与实例属性
- Django(part41)--中间键Middleware
- 小程序 报错 err code: 40029, errmsg: 'invalid code, hints: [ req_id: JhIay6yFe-XN5A3 ]'
- python3.4安装pygame_python 3.4.3 安装pygame
- [转载] python下载安装教程
- CentOS 6.x通过yum安装php7.1及相关环境
- Python3调用新浪微博API抓取数据
- 一键批量检测微信是否被好友删除
- Topaz Mask AI 人工智能抠图插件
- 标书制作,全流程视频教程大全
- mysql退出安全模式_MySQL数据库之mysql 解除安全模式
- 测试老鸟分享:掌握2项技能,轻松拿到软件测试工程师offer...
- 没有mysql不能设置root密码怎么办_无法给MySQL root用户修改密码的解决方法
- 软件破解简单示例演示
- 为什么canal数据只推送到kafka topic的其中一个分区中
- #今日论文推荐# 斯坦福开发微型机器人,改善靶向给药技术
- vue 点击打开pdf
- Java并发体系-第二阶段-锁与同步-[1]-【万字文系列】
- CMMI2.0是什么?
热门文章
- python编写交互界面查分_python小习题:查分数 - 李金龙
- Chaarshanbegaan at Cafebazaar 水题
- 中文信息处理——分词评价程序(计算分词结果的准确率,召回率,F测度)
- 文具订购(【CCF】NOI Online能力测试 入门组第一题)
- vscode-background插件“卸载“以及“禁用“失效
- ROS与Matlab协同进行运动控制
- 定制适用于ARM平台的Ubuntu rootfs(根文件系统)
- 【javajni】jni入门篇
- 火星人谚语系列之八:少读书,多思考
- Django Rest Framework源码剖析(七)-----分页