[LeetCode23]Merge k Sorted Lists

ArcGIS中地理坐标系与投影坐标系以及投影转换 简单介绍arcgis软件中坐标系定义、设置和常见问题。 阅读详情

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

While the lists is not empty, keep merging the list to the result list. Method to merge two lists is the same as.

Question 54: Merge Two Sorted Lists

ListNode *merge2Lists(ListNode *head1, ListNode *head2){
        ListNode *head = new ListNode(INT_MIN);
        ListNode *pre = head;
        while(head1 != NULL && head2 != NULL){
            if(head1->val <= head2->val){
                pre->next = head1;
                head1 = head1->next;
            }else{
                pre->next = head2;
                head2 = head2->next;
            }
            pre = pre->next;
        }
        if(head1 != NULL){
            pre->next = head1;
        }
        if(head2 != NULL){
            pre->next = head2;
        }
        pre = head->next;
        delete head;
        return pre;
    }
ListNode *mergeKLists(vector<ListNode *> &lists) {
        if(lists.size() == 0) return NULL;
        ListNode *p = lists[0];
        for(int i=1; i<lists.size(); i++){
            p = merge2Lists(p, lists[i]);
        }
        return p;
    }
java

public ListNode mergeKLists(List<ListNode> lists) {
                ListNode head = new ListNode(-1);
        ListNode p = head;
        if(lists.size()==0) return null;
        if(lists.size()==1) return lists.get(0);
        ListNode l1 = lists.get(0);
        for(int i=1;i<lists.size();i++){
        	ListNode l2 = lists.get(i);
        	while(l1!=null && l2!=null){
        		if(l1.val<l2.val){
        			p.next = l1;
        			l1 = l1.next;
        			p = p.next;
        		}else{
        			p.next = l2;
        			l2 = l2.next;
        			p = p.next;
        		}
        	}
        	while(l1!=null){
        		p.next = l1;
        		p = p.next;
        		l1 = l1.next;
        	}
        	while(l2!=null){
        		p.next = l2;
        		p = p.next;
        		l2 = l2.next;
        	}
        	l1 = head.next;
        	p = head;
        }
        return head.next;
    }

Refactor: Sep/17/2014

Java Recursion

It’s similar to merge sort. For example, assuming we have 4 lists: 1, 2, 3, 4. We can merge 1 and 2 to be a new list 5. And 3 and 4 can be merged to be a new list 6. Finally we merge 5 and 6 to get the result. So in this algorithm, we divide the lists by 2 until its size reaches 1. And then merge them from bottom to top. We have T(n) = 2T(n/2) + kn. So the complexity is O(kn logn). The depth of the recursive function is O(log n).

public ListNode mergeKLists(List<ListNode> lists) {
		if(lists.size()<=0) return null;
		if(lists.size()==1) return lists.get(0);
        return mergeKlists(lists, 0, lists.size()-1);
    }
	public ListNode mergeKlists(List<ListNode> lists, int left, int right){
		if(left<right){
			int mid = left+(right-left)/2;
			return merge2List(mergeKlists(lists, left, mid), mergeKlists(lists, mid+1, right));
		}
		return lists.get(left);
	}
	public ListNode merge2List(ListNode l1, ListNode l2){
		ListNode newHead = new ListNode(-1);
		ListNode p1 = newHead;
		while(l1!=null && l2!=null){
			if(l1.val<=l2.val){
				p1.next = l1;
				l1 = l1.next;
			}else {
				p1.next = l2;
				l2 = l2.next;
			}
			p1 = p1.next;
		}
		p1.next = (l1==null) ? l2:l1;
		return newHead.next;
	}

There is another optimal way using a priority queue. We can add the heads of all lists in to the queue. And we can poll out the smallest one. If the next node of this smallest node is not null, we can add the next node to the queue. We will continue doing this until the queue is empty. Every time we add a new element to the queue, it costs O(log n). And we have k elements. So the complexity is O(k logn) + O(k) = O(k logn). And the space complexity is only O(k). k is the total number of lists, n is length of each linked list.

public ListNode mergeKLists(List<ListNode> lists) {
		Comparator<ListNode> listNodeComparator = new Comparator<ListNode>() {
			
			@Override
			public int compare(ListNode l1, ListNode l2) {
				// TODO Auto-generated method stub
				return l1.val-l2.val;
			}
		};
		if(lists.size()==0) return null;
		Queue<ListNode> pQueue = new PriorityQueue<>(lists.size(), listNodeComparator);
		for(int i=0;i<lists.size();i++){
			if(lists.get(i)!=null){
				pQueue.add(lists.get(i));
			}
		}
		ListNode head = new ListNode(0);
		ListNode p = head;
		while(!pQueue.isEmpty()){
			ListNode node = pQueue.poll();
			p.next = node;
			if(node.next!=null){
				pQueue.add(node.next);
			}
			p = p.next;
		}
		return head.next;
    }





opencv案例实战——银行卡模式匹配识别 在之前的几篇文章中我们已经介绍了opencv的一些基础知识,本篇文章我们将结合一个案例运用之前的知识并且学习opencv中模式匹配的应用,用到的知识点如果有不清楚的可以查看上面列出来的系列文章。具体代码会放在最后。 阅读详情

相关推荐

数据仓库的复用性:设计和构建一个高复用性的数仓

数据仓库的复用性是指在数据仓库的设计和使用过程中,能够实现数据、模型、流程、工具等多个层面的重复利用,减少重复开发,提高开发效率,降低维护成本,并增强灵活性和可扩展性。

z1941563559的博客 1307

LeetCode 23. Merge k Sorted Lists 合并k个已排序的链表为一个排序链表

Mergeksorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4-...

南方以北 1250

Applied Energy期刊小白论文投稿模板-流程经验分享

Applied Energy期刊小白论文投稿模板-流程经验分享,Elsevier期刊(爱思唯尔)投稿流程

zzu_Flyer的博客 4万+

LeetCode 23. Merge k Sorted Lists 题解

本题是链表的经典问题,主要考察对链表操作和多种算法思想的理解和应用。通过使用逐次合并、分治法或优先队列,我们可以高效地合并 k 个有序链表。逐次合并的核心思想是:逐个合并链表,每次将当前合并结果与下一个链表合并。分治法的核心思想是:将链表数组分成两半,分别合并每一半,然后将合并后的两个链表再合并。优先队列的核心思想是:使用最小堆来存储每个链表的头节点,每次取出最小的节点,添加到结果链表中。在实际应用中,优先队列方法通常更受欢迎,因为它的时间复杂度较低,而且实现相对简单。

cannonjinx的博客 4997

MDT部署实战:除了Office,这些“装机必备”软件也能一键静默安装(含静默参数)

本文详细介绍了如何利用Microsoft Deployment Toolkit(MDT)实现企业级软件的静默安装,包括浏览器、开发工具和系统增强工具等“装机必备”软件的部署方案。通过命令行参数和MSI属性,IT运维团队可以高效构建标准化工作环境,提升部署效率并确保版本一致性。文章还提供了安装顺序控制、结果验证和常见问题排错等高级技巧。

weixin_26985923的博客 172

2.13寸电子墨水屏HINK-E0213+esp8266

很久以前买的一块电子墨水屏,运气很好,这个型号HINK-E0213资料很全,而且微雪官网也有相关电路资料等。

梦境虽美,却不长. 3004

[leetcode] 23. Merge k Sorted Lists

Description Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1-&gt;4-&gt;5, 1-&gt;3-&gt;4, 2-&gt;6 ] Output: 1-&gt;1-&gt;2-&gt...

Learning from the mistakes 160

库卡kuka仿真软件sim Pro 3.1简单实用教程

实验目的 建立机器人,自定义抓手,导入外部模型,掌握工具坐标、基坐标的使用,自动生成轨迹。 实验步骤 打开KUKA.Sim Pro 3.1.2仿真软件,依次点击KUKA Sim Library 3.1 → KUKA_ROBOTS→Small Robots(3kg-10kg)→Archiv→AGILUS-1 Series→sixx,双击KR 6 R700 sixx,加载机器臂到工作空间; 加载自定义抓手。双击Miscellaneous,再双击圆锥Cone设置上半径为0,下半径为40,高为100; 点击“捕

weixin_45168199的博客 4万+

【leetcode】23. Merge k Sorted Lists

23. Merge k Sorted ListsProblemSolution1、Python (124 ms, faster than 61.75% ) Problem Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input:...

tianxieeryang的博客 238

innovus:ccopt_design分段长tree操作

这步don't touch保证后面完整cts尽量不会动到已经长过的tree。需要给sub tree手写一个spec,参考create_ccopt_clock_tree_spec -file的写法,只写create_ccopt_clock_tree和skew group部分就行。

m0_61544122的博客 1679

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 136

【LeetCode】23. Merge k Sorted Lists

Leetcode23 传送门 两种解法: 1. 调用merge two sorted lists,一次merge两个链表,直到全部merge为一个链表。设每个链表长度为n,共k个链表,时间复度通过两数值的比较次数计算:,空间复杂度为。 2. 采用堆数据结构,将所有链表中的最小元素加入有序堆,当一个最小元素被加入结果链表后,将该最小元素所在链表的下一节点值加入该堆,直至堆为空。插入过程最少查找...

weixin_42344158的博客 312

AI问数,智慧赋能:基于大语言模型的数据播报员应用实践探索

AI问数技术正在改变企业与数据交互的方式,它以自然语言为桥梁,让数据不再是少数专家的专利,而是成为所有业务人员的决策伙伴。这不仅是技术的创新,更是管理理念的革新。在数字化转型的关键阶段,企业应积极拥抱AI问数技术,通过降低数据使用门槛、提升数据利用效率、释放数据潜在价值,实现真正的数据驱动决策,为企业的高质量发展注入源源不断的智慧动能。AI问数,正在开启一个数据普惠的新时代。

getusushu的博客 64

LeetCode 23: Merge K Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 本题在上一题(LeetCode 21: Merge Two Sorted Lists)基础上再加深了一步,链表个数从两个改为K个。 此题有如下几种解法: 1、最简单的方法莫过于每次

哈哈的个人专栏 4316

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Leetcode 23 Merge k Sorted Lists

标为hard难度的一道题,有点interesting, 题意为把K条有序的链表归并为一条有序的链表。 开始想也没想直接暴力n*k的复杂度,果不其然T了,数据出现了n=10000,k=10000的情况,不然怎么对得起hard难度呢? 合并两个链表的复杂度为O(n+m),如果用在这题中,虽然合并次数将很多,但到后来会形成长链和短链的合并, 长链的最后一部分往往是直接接入的,因而实际的平均复杂度并不会很高,但具体是多少,也不太好分析。 这种想法在一般的情况下,应当是优于第一种做法的, 可是后来我想到,如果K个链表

无名山丘,崛起成峰 3866

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

leetcode 23. Merge k Sorted Lists

一 题目 Mergeksorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3-...

bohu83的博客 329

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 23:Merge k Sorted Lists 解题与思考

LeetCode 23:Merge k Sorted Lists 解题与思考[原题链接]题目描述将若干个有序数列合并成一个,简单点说就是归并排序的第二步思路很显然,只需要对所有数列的头部进行遍历,每遍历一次取出最值就好。当然,作为通过率较低的hard题目,其需要考虑的情况也不少。我最先想到的是需要判断数列顺序的升降序,结果没能ac,因为leetcode还特别喜欢测试空数组的情况。不过只要好好考虑了这

码农a嘘的博客 210

LeetCode (力扣) 23. Merge k Sorted Lists (C) - Hard

同步发于JuzerTech网站,里面有我软、硬件学习的纪录与科技产品开箱,欢迎进去观看。 这题是 LeetCode 21. Merge Two Sorted Lists 的延伸,把两个链表 ( Linked List ) 增加到多个。 把多个链表 ( Linked List ) 依照大小排序,串接在一起,并回传串接完的 Linked List。 题目与范例如下 You are given an array of k linked-lists lists, each linked-list i..

JuzerTech的博客 255

leetcode第23题——***Merge k Sorted Lists

题目 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 思路 将数组中的k个有序链表归并成一个有序链表,并分析时间复杂度。该题可以在第22题-"merge two sorted lists"的基础上设计算法。 一开始想到遍历数组的k-1

buptlrw的专栏 984

LeetCode 23. Merge k Sorted Lists

LeetCode 23. Merge k Sorted Lists 题目描述: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1-&gt;4-&gt;5, 1-&gt;3-&gt;4, ...

qq_40280096的博客 177

LeetCode 23 Merge k Sorted Lists

LeetCode 23 Merge k Sorted Lists Description Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解题思路 可以把第21题两路归并的代码拿过来用。 代码 class Solution { p...

一只小羊 205

Leetcode23. Merge k Sorted Lists

Leetcode23. Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example: Input: [ 1->4->5, 1->3->4, 2->6 ] Ou...

magic_jiayu的博客 221

LeetCode:23 Merge k Sorted Lists

problem LeetCode 23. Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. solution 方法一 思路过程 代码 python 在这里插入代码片 Java 在这里插入代码片

erzhushashade的博客 260

【leetcode】(python) 23. Merge k Sorted Lists

目录DescriptionExample题目大意解体思路code参考较优解解题思路code Description Merge k Sorted Lists hard Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. Example Input: ...

。 210
上一篇: [LeetCode19]Remove Nth Node From End of List
下一篇: [LeetCode82]Rotate List
Mavs
博客等级 码龄17年 166粉丝 296原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值