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(-);
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;
else
p->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 <= )
return NULL;
while(n > ){
int k = (n + )/;
for(int i = ;i < n/;i++)
lists[i] = mergeList(lists[i],lists[i + k]);
n = k;
}
return lists[];
}
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 > ){
int k = (n + )/;
for(int i = ;i < n/;i++)
lists[i] = merge(lists[i],lists[i + k]);
n = (n + )/;
}
return lists[];
}
ListNode* merge(ListNode* l1,ListNode* l2){
ListNode* dummy = new ListNode(-);
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;
else
p->next = l2;
return dummy->next;
}
};
21.Merge Two Sorted Lists 、23. Merge k Sorted Lists的更多相关文章
- 刷题23. Merge k Sorted Lists
一.题目说明 这个题目是23. Merge k Sorted Lists,归并k个有序列表生成一个列表.难度为Hard,实际上并不难,我一次提交就对了. 二.我的解答 就是k路归并,思路很简单,实现也 ...
- LeetCode 23. 合并K个排序链表(Merge Two Sorted Lists)
23. 合并K个排序链表 23. Merge k Sorted Lists 题目描述 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. LeetCode23. Merge k S ...
- [Leetcode][Python]23: Merge k Sorted Lists
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 23: Merge k Sorted Listshttps://oj.leet ...
- LeetCode LinkList 23. Merge k Sorted Lists
这两天一直也没有顾上记录一下自己做过的题目,回头看看,感觉忘的好快,今天做了一个hard,刚开始觉得挺难得,想了两种方法,一种是每次都从k个list中选取最小的一个,为空的直接跳过,再就是每次合并其中 ...
- [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- 【LeetCode】23. Merge k Sorted Lists 合并K个升序链表
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:合并,链表,单链表,题解,leetcode, 力扣,Py ...
- 23. Merge k Sorted Lists - LeetCode
Question 23. Merge k Sorted Lists Solution 题目大意:合并链表数组(每个链表中的元素是有序的),要求合并后的链表也是有序的 思路:遍历链表数组,每次取最小节点 ...
- [leetcode 23]Merge k Sorted Lists
1 题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexi ...
- 23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. = ...
随机推荐
- centos搭建集群
centos 搭建集群步骤 1.使用yum安装所需要的工具 yum -y install wget vim tcl gcc make 2.下载redis并解压 cd /usr/local wget h ...
- spring-security配置和原理简介
SpringSecurity3的核心类有三种 1.URL过滤器或方法拦截器:用来拦截URL或者方法资源对其进行验证,其抽象基类为AbstractSecurityInterceptor 2.资源权限获取 ...
- ubuntu python3虚拟环境
mkvirtualenv flow_chart -p /usr/bin/python3.6 # 命令 环境名 -p python所在路径 pip install -r request ...
- 做一个函数 返回当前日期、当前时间 格式为“XXXX年XX月XX日”
import time import datetime def time_strf(now_date):#传入0,1,2返回 当前日期.当前时间.当前日期与时间 today=datetime.date ...
- Java与CC++交互JNI编程
哈哈,经过了前面几个超级枯燥的C.C++两语言的基础巩固之后,终于来了到JNI程序的编写了,还是挺不容易的,所以还得再接再厉,戒骄戒躁,继续前行!! 第一个JNI程序: JNI是一种本地编程接口.它允 ...
- SQL SERVER 2008 数据库隔离级别代码演示
SQL SERVER 2008 数据库隔离级别代码演示 个隔离级别(其实这是SQL 工业标) 种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性 ...
- goroutine 修改全局变量无效问题
原文:https://studygolang.com/topics/7050 go修改全局变量的问题 测试 goroutine 修改全局变量,有x y 两个全局函数,分别在两个 goroutine f ...
- 0005SpringBoot中用Junit测试实体类中绑定yml中的值
1.编写SpringBoot的引导类 package springboot_test.springboot_test; import org.springframework.boot.SpringAp ...
- myEclipse设置
字符集设置 点击菜单:window——preferences 输入:Workspace 字体大小设置 输入:colors and fonts 本机字体:14 显示行号 输入:Text Editors ...
- MySQL GROUP BY 语句
GROUP BY 语句根据一个或多个列对结果集进行分组. 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. GROUP BY 语法 SELECT column_name, funct ...