21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

21.Merge Two Sorted Lists

初始化一个指针作为开头,然后返回这个指针的next

class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* dummy = new ListNode(-1);ListNode* p = dummy;while(l1 && l2){if(l1->val <= l2->val){p->next = l1;p = p->next;l1 = l1->next;}else{p->next = l2;p = p->next;l2 = l2->next;}}if(l1)p->next = l1;elsep->next = l2;return dummy->next;}
};

 

 

 

23. Merge k Sorted Lists

 

https://www.cnblogs.com/grandyang/p/4606710.html

这个是分治的思想

实质上就是每次合并一半的链表,且两两合并的链表按照一定间隔距离进行合并

class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {int n = lists.size();if(n <= 0)return NULL;while(n > 1){int k = (n + 1)/2;for(int i = 0;i < n/2;i++)lists[i] = mergeList(lists[i],lists[i + k]);n = k;}return lists[0];}ListNode* mergeList(ListNode* l1,ListNode* l2){if(l1 == NULL)return l2;if(l2 == NULL)return l1;ListNode* head;if(l1->val < l2->val){head = l1;head->next = mergeList(l1->next,l2);}else{head = l2;head->next = mergeList(l1,l2->next);}return head; }
};

自己写的:

用非递归也可以合并两个链表。

k = (n + 1)/2中k代表间隔,vector中的链表等间隔合并,这样能达到减少一半的目的。+1的目的是针对奇数这种情况,中间一定会剩下一个单独的,这个单独的也要保留在vector中。n代表当前已更新剩下的链表个数,其实也就是存放在lists中的前n个。+1的目的其实也是针对奇数个的情况。

class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.empty())return NULL;int n = lists.size();while(n > 1){int k = (n + 1)/2;for(int i = 0;i < n/2;i++)lists[i] = merge(lists[i],lists[i + k]);n = (n + 1)/2;}return lists[0];}ListNode* merge(ListNode* l1,ListNode* l2){ListNode* dummy = new ListNode(-1);ListNode* p = dummy;while(l1 && l2){if(l1->val < l2->val){p->next = l1;p = p->next;l1 = l1->next;}else{p->next = l2;p = p->next;l2 = l2->next;}}if(l1)p->next = l1;elsep->next = l2;return dummy->next;}
};

 

转载于:https://www.cnblogs.com/ymjyqsx/p/10518508.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求最大公约数----辗转相除法

辗转相除法&#xff08;求最大公倍数&#xff09; 一般写法&#xff1a; public class Main {public static void main(String[] args) {System.out.println(gcd(18, 2));}private static int gcd(int a, int b) {// TODO Auto-generated method stubwhile (b ! 0) {int c a…

使用kubeadm安装kubernetes高可用集群

kubeadm安装kubernetes高可用集群搭建 第一步&#xff1a;首先搭建etcd集群yum install -y etcd配置文件 /etc/etcd/etcd.confETCD_NAMEinfra1 ETCD_DATA_DIR"/var/lib/etcd" ETCD_LISTEN_PEER_URLS"https://172.20.0.113:2380" ETCD_LISTEN_CLIENT_URLS&q…

蓝桥杯第七届国赛JAVA真题----平方末尾

平方末尾 能够表示为某个整数的平方的数字称为“平方数” 比如&#xff0c;25,64 虽然无法立即说出某个数是平方数&#xff0c;但经常可以断定某个数不是平方数。 因为平方数的末位只可能是&#xff1a;[0, 1, 4, 5, 6, 9] 这6个数字中的某个。 所以&#xff0c;432543533…

紫书 团队队列(队列)

1.用两个队列来维护成员&#xff0c;一个队列维护队伍编号&#xff0c;一个队列数组维护每个队伍的成员 ps: 紫书p118 #include <bits/stdc.h> using namespace std;int t, k, x, y; queue<int> allq; queue<int> q[12]; vector<int> v; string s1&quo…

蓝桥杯第七届国赛JAVA真题----七星填数

七星填数 如图【图1.png】所示。 在七角星的14个节点上填入1~14 的数字&#xff0c;不重复&#xff0c;不遗漏。 要求每条直线上的四个数字之和必须相等。 图中已经给出了3个数字。 请计算其它位置要填充的数字&#xff0c;答案唯一。 填好后&#xff0c;请提交绿色节点的4个…

Codeforces Round 546 (Div. 2)

layout: post title: Codeforces Round 546 (Div. 2) author: "luowentaoaa" catalog: true tags: mathjax: true - codeforces - 贪心 - 数学 - 线段树 传送门 A - Nastya Is Reading a Book (签到) 题意 给出每一章的页数范围&#xff0c;然后告诉你当前看到那一页…

洛谷 P1219 ---- 八皇后

题目描述 检查一个如下的6 x 6的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。 上面的布局可以用序列2 4 6 1 3 5来描述&#xff0c;第i个数字表示在第i行…

PXE(preboot execution environment):【网络】预启动执行环节:引导 live光盘 ubuntu livecd 16.4:成功...

default menu.c32label ubuntu menu label ubuntu (version 16.04) kernel ub1604/casper/vmlinuz append root/dev/nfs bootcasper netbootnfs nfsroot192.168.56.1:/e/_temp/ub1604 initrdub1604/casper/initrd quiet splash --# 关键是搭建nfs相应的服务器器并export解压后的…

PHP实现多文件上传

PHP文件上传流程 单击提交按钮&#xff0c;浏览器用户将包含上传文件的表单数据提交给PHP处理程序Web服务器和PHP预处理器首先判断表单数据的大小是否超过php.ini配置文件中的post_max_size选项设置的上限值。 若超过&#xff0c;PHP处理程序将无法得到任何表单数据&#xff0…

bzoj5324:[Jxoi2018]守卫

传送门 首先考虑定下一个端点&#xff0c;然后剩下的就可以递推了 一开始想的是定下左端点&#xff0c;然后预处理出位置最远能看到的位置&#xff0c;后来发现时间GG了 看题解发现定右端点优秀得多 记录下当前\(r\)最远能看到的位置\(p\)&#xff0c;能看到\([p,r]\)一共需要几…

蓝桥杯第八届省赛JAVA真题----分巧克力

标题&#xff1a; 分巧克力 儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克…

蓝桥杯第八届省赛JAVA真题----油漆面积

标题&#xff1a;油漆面积 X星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便&#xff0c;建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量&#xff0c;每个机器人都会报告…

练习2——顺序表

//实现顺序表基本功能&#xff0c;然两个顺序表相并 #include <iostream> #include <stdlib.h> using namespace std; typedef int T; class SeqList{T *data;int MaxSize;int last; public:SeqList(int sz);~SeqList(){delete [] data;}int Length() const {retur…

docker占满linux磁盘根目录的解决办法

一、磁盘根目录被占满 [testlocalhost docker]$ df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 50G 0G 100% / devtmpfs 7.7G 0 7.7G 0% /dev tmpfs 7.8G 0 7.8G 0…

蓝桥杯第八届省赛JAVA真题----包子凑数

标题&#xff1a;包子凑数 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼&#xff0c;其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买X个包子&#xff0c;卖包子的大叔就会迅速选出若干笼包子来&…

蓝桥杯第八届省赛JAVA真题----字母组串

标题&#xff1a;字母组串 由 A,B,C 这3个字母就可以组成许多串。 比如&#xff1a;”A”,”AB”,”ABC”,”ABA”,”AACBB” …. 现在&#xff0c;小明正在思考一个问题&#xff1a; 如果每个字母的个数有限定&#xff0c;能组成多少个已知长度的串呢&#xff1f; 他请好…

蓝桥杯第八届省赛JAVA真题----9数算式

标题&#xff1a;9数算式 观察如下的算式&#xff1a; 9213 x 85674 789314562 左边的乘数和被乘数正好用到了1~9的所有数字&#xff0c;每个1次。 而乘积恰好也是用到了1~9的所有数字&#xff0c;并且每个1次。 请你借助计算机的强大计算能力&#xff0c;找出满足如上要…

《剑指offer》第五十三题(数组中数值和下标相等的元素)

// 面试题53&#xff08;三&#xff09;&#xff1a;数组中数值和下标相等的元素 // 题目&#xff1a;假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实 // 现一个函数找出数组中任意一个数值等于其下标的元素。例如&#xff0c;在数组{-3, -1, // 1, 3, 5}中…

Mysql 外键创建失败原因

最近在学习PHP&#xff0c;在用mysql创建表的时候总是创建不出来&#xff0c;我用的是Navicat做的&#xff0c;虽然建不出来外键&#xff0c;但是会创建出来一个索引&#xff0c;后来才明白&#xff0c;一定要有了对应的索引才能创建外键。

shiro(1) 介绍

一、什么是shiro&#xff08;1&#xff09;属性&#xff1a;java框架&#xff08;2&#xff09;用途&#xff1a;身份验证、用户授权、加密、会话管理&#xff08;3&#xff09;优点&#xff1a;轻量、易用二、三大组件&#xff08;1&#xff09;subject&#xff1a;代表当前主…