T23合并k个升序链表

news/2024/11/27 19:39:52/

case1:逐一两两合并

class Solution {public ListNode twoWayCombation(ListNode h1,ListNode h2){//二路归并if(h1==null&&h2==null)return h1;if(h1==null)return h2;if(h2==null)return h1;ListNode head = new ListNode(-1);ListNode rear = head;while(h1!=null&&h2!=null){if(h1.val<=h2.val){rear.next = h1;h1 = h1.next;}else{rear.next = h2;h2 = h2.next;}rear = rear.next;}if(h1!=null){rear.next = h1;}if(h2!=null){rear.next = h2;}return head.next;}public ListNode mergeKLists(ListNode[] lists) {int len = lists.length;if(len<=0)return null;if(len==1)return lists[0];ListNode left = lists[0];int right = 1;while(right<len){left = twoWayCombation(left,lists[right]);right++;}return left;}
}

case2:思想:采用外部排序,利用小顶堆来实现
时间复杂度O( n*logk) 空间复杂度O(k) k为链表的个数,n为链表的最大长度

class Solution {public ListNode mergeKLists(ListNode[] lists) {if(lists.length==1) return lists[0];PriorityQueue<ListNode> heap = new PriorityQueue<>(new Comparator<ListNode>(){@Overridepublic int compare(ListNode o1,ListNode o2){return o1.val-o2.val;}});for(ListNode head:lists){if(head!=null){heap.add(head);}}ListNode newHead = new ListNode(-1);ListNode rear = newHead;while(!heap.isEmpty()){ListNode cur = heap.poll();ListNode next = cur.next;if(next!=null){heap.add(next);}cur.next = null;rear.next = cur;rear = rear.next;  }return newHead.next;}
}

case3:使用分治思想,对链表使用二路归并排序
时间复杂度O(nlog k ),空间复杂度O(logk)

class Solution {public ListNode merge(ListNode h1,ListNode h2){if(h1==null&&h2==null)return h1;if(h1==null)return h2;if(h2==null)return h1;ListNode head = new ListNode(-1);ListNode rear = head;while(h1!=null&&h2!=null){if(h1.val<=h2.val){rear.next = h1;h1 = h1.next;}else{rear.next = h2;h2 = h2.next;}rear = rear.next;}if(h1!=null){rear.next = h1;}if(h2!=null){rear.next = h2;}return head.next;}public ListNode dividen(ListNode[]lists,int start,int end){if(start>end) return null;if(start==end) return lists[start];int mid = (start+end)/2;ListNode left = dividen(lists,start,mid);ListNode right = dividen(lists,mid+1,end);return merge(left,right);}public ListNode mergeKLists(ListNode[] lists) {int len = lists.length;if(len<=0)return null;if(len==1)return lists[0];return dividen(lists,0,len-1);}
}

http://www.ppmy.cn/news/249868.html

相关文章

IBM T23系列U盘启动

1 下载Usboot格式化U盘&#xff0c;一定要用HDD模式格式化。 下载地址&#xff1a; http://download.pchome.net/system/disk/18411.html 2 格式化完成后&#xff0c;关闭本本电源。&#xff08;不是直接重启&#xff0c;一定要关闭电源&#xff09; 3 启动电脑进入BIOS设置&am…

TFN RMT 手持式路测仪 5G NR 手持式频谱分析仪

TFN RMT手持式频谱分析仪是由青岛一卓光电科技有限公司新推出的一款高性能、全功能版频谱分析仪&#xff0c;不仅可无线干扰排查&#xff0c;兼具基站测试、路测等功能。目前分为三个型号RMT716A&#xff08;9KHz-6.3GHz&#xff09;、RMT719A&#xff08;9KHz-9GHz&#xff09…

记录紫图高拍仪的一个使用兼容问题

本码农接到领导任务:需要将紫图高拍仪接入当前web系统. 但是由于本马大哈只埋头苦干,并没有询问开发详细细节,就导致项目发布到生产环境上问题百出. 主要问题有两点: 1.客户使用的浏览器为IE8,IE8在我眼里简直就是上个世纪的浏览器. 2.紫图提供的js文件问题 客户的浏览器一定…

Linux系统高拍仪二次开发(支持银河麒麟/统信uos/中科方德系统)

文豆高拍仪Linux版BS(Web)架构二次开发包已可支持银河麒麟KYLin和统信UOS国产操作系统及CPU&#xff0c;兼容性能优异稳定可靠&#xff0c;可实现与业务软件无缝对接&#xff0c;助力国产化进程&#xff0c;为用户提供更好的办公体验。 支持平台&#xff1a;银河麒麟MIPS(龙芯…

讯派高拍仪联合钉钉使用教程

讯派高拍仪联合钉钉使用教程 产品型号&#xff1a;便携式实物展台HV600(HDMI) www.shyiyou.cn 要在浏览器中复制网址打开&#xff0c;不建议直接用微信或者QQ打开 打开之后的界面&#xff1a; 先去下载中心----》软件下载—》最后点击讯派高拍仪软件下载&#xff08;最后看…

方正高拍仪文件上传到服务器,高拍仪拍摄文件后如何进行文字识别?本地文件能否导入高拍仪进行识别?...

原标题&#xff1a;高拍仪拍摄文件后如何进行文字识别&#xff1f;本地文件能否导入高拍仪进行识别&#xff1f; 日常办公和学习中&#xff0c;常常有许多资料需要进行二次编辑&#xff0c;但受限于文件是纸质文档或者图片文件&#xff0c;无法直接进行二次编辑&#xff0c;只能…

中纬ZOOM35全站仪参数和使用说明书

免棱镜测程采用全新EDM&#xff0c;明显提升测距功能。极细可见激光免棱镜测程最高可达1000m&#xff0c;同等测程下无棱镜精度较高。 绝对编码度盘中纬静态条码式码盘测角&#xff0c;开机无需初始化&#xff0c;利用同样技术的徕卡全站仪&#xff0c;测角精度可高达0.5&#…

良田高拍仪集成WEB说明

良田高拍仪集成WEB说明 ——By wuhebin 20180705 1. 硬件说明&#xff1a;良田高拍仪S620A3F(R) 带二代身份证阅读器和拍照摄像头等 2. WEB平台集成读卡器功能说明(注只支持IE浏览器&#xff0c;高版本IE或360需要在兼容模式下&#xff1a; 3. WEB增加控件OCX代码如下&a…