<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文主要介紹如何將多個小的升序連結串列合併一個大的升序連結串列。
給出K個升序連結,要求把這K個升序連結串列合併成一個,並且這個連結串列也是升序的。
例如:A = [1,5,6]
, B = [2,3,8]
, C = [4,4,9]
將這3個連結串列合併成一個連結串列D
,合併後D = [1,2,3,4,4,5,6,8,9]
,並且將D
的第一個節點返回。
我們可以採用優先順序佇列來實現,先把每個連結串列的頭結點放到一個優先順序佇列裡,優先順序佇列也叫小根堆。
在放小根堆的時候,誰小就把誰放在最上面。需要注意的是,我們放入的時候,放入的是節點,所以通過這個節點是可以存取整個連結串列的。
我們看下處理過程:
1,2,4
。1
。1
節點的下一個節點5
放入小根堆中,此時小根堆會自動調整順序,此時為:2, 4, 5
。2
節點彈出,讓1
節點的next
指標指向2
節點,並且將2
節點的下一個節點6
放入小根堆,此時已彈出的節點為 1,2
,而小根堆為4, 5, 6
。4
節點彈出,讓2
節點的next
指標指向4
節點,並且將4
節點的下一個節點4
放入小根堆中,此時已彈出的節點為1,2,4
,而小根堆為4, 5, 6
。好了,現在整體思路有了,但是現在是不是有個疑問?我們在做演演算法時,使用到了優先佇列,那麼我們可以使用系統自帶的優先佇列嗎?
個人感覺,如果是面試時,這個系統自帶的類只是題目中很小的一部分,比如上面的題目,主要考察的是如何實現這個過程,而不是考察如何實現優先佇列的,如果沒有特殊要求不讓使用的話,是可以使用的。當然,如果考察是要實現一個優先佇列,我要是直接new
一個PriorityQueue
,我估計面試官會一巴掌把我拍出來。
連結串列節點定義如下:
public class ListNode { public int val; public ListNode next; }
因為是小根堆,需要一個排序演演算法,所以定義一個比較器如下:
public class ListNodeComparator implements Comparator<ListNode> { @Override public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }
合併連結:
public ListNode mergeKLists(ListNode[] lists) { if (lists == null) { return null; } PriorityQueue<ListNode> heap = new PriorityQueue<>(new ListNodeComparator()); for (int i = 0; i < lists.length; i++) { if (lists[i] != null) { heap.add(lists[i]); } } if (heap.isEmpty()) { return null; } ListNode head = heap.poll(); ListNode pre = head; if (pre.next != null) { heap.add(pre.next); } while (!heap.isEmpty()) { ListNode cur = heap.poll(); pre.next = cur; pre = cur; if (cur.next != null) { heap.add(cur.next); } } return head; }
這個方法引數lists
代表要傳進來多少個連結串列,方法合併多個連結串列後,返回連結串列的第一個節點。
假設有M
個連結串列,M
個連結串列的總節點個數為N
。此時,對於小根堆來說,他的規模大小為M
,則對於小根堆來說他的操作時間複雜度為O(logM)
,一共有N
個節點,所以時間複雜度為O(N*logM)
。
本文主要介紹如何將多個小的升序連結串列合併一個大的升序連結串列,介紹了實現這個功能的思路分析,使用優先佇列自動排序的特性實現了這個功能,當然這裡我們使用的是系統自帶的優先佇列,其實也可以自己實現一個,個人感覺沒太必要,就先偷個懶 。更多相關Java 合併升序連結串列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
到此這篇關於Java實現合併多個升序連結串列的文章就介紹到這了,更多相關Java 合併升序連結串列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45