当前位置: 首页 > 后端技术 > Java

牛客网高频算法题系列-BM5-mergek排序链表

时间:2023-04-02 00:24:44 Java

牛客网高频算法题系列-BM5-mergek排序链表题目描述合并k个升序链表并生成结果返回其头部节点作为升序链表。参见原标题:BM5MergingksortedlinkedlistsSolution1:divideandconquer,可以将一个大问题分解成小问题,然后继续分解成最小的子问题并求解。具体处理过程如下,将k个链表分解成2部分进行处理,递归处理这2部分,调用BM4中合并两个排序后的链表的方法合并2个合并后的链表,最小子的条件-问题是:没有要合并的链表,所以直接返回空。如果只有一个链表,则无需合并,直接返回链表。如果不是,则需要继续分解,递归处理。说明:BM4合并两个排序链表,请参考牛客网高频算法系列-BM4-合并两个排序链表。代码importcom.google.common.collect.Lists;importjava.util.ArrayList;importjava.util.List;publicclassBm005{/***分而治之**@paramlists*@return*/publicstaticListNodemergeKLists(Listlists){//如果没有要合并的链表,直接返回空if(lists==null||lists.size()==0){returnnull;}//如果只有一个链表,If(lists.size()==1){returnlists.get(0);}intleft=0,right=lists.size();intmid=(左+右)/2;//递归调用当前方法将原来的链表集合分成两部分分别合并//然后调用BM4中的方法合并两个排序后的链表合并两个合并后的链表returnBm004.merge(mergeKLists(lists.subList(0,mid)),mergeKLists(lists.subList(mid,right)));}publicstaticvoidmain(String[]args){ListNodelistNode1=ListNode.testCase3();系统输出。println("列出一个");ListNode.print(listNode1);ListNodelistNode2=ListNode.testCase4();System.out.println("链表2");ListNode.print(listNode2);ListNodelistNode3=newListNode(7);System.out.println("链表3");ListNode.print(listNode3);ArrayListlists=Lists.newArrayList(listNode1,listNode2,listNode3);ListNoderesult=mergeKLists(lists);//测试用例,预期输出:1->2->3->4->5->6->7System.out.println("Mergedlinkedlist");ListNode.print(结果);}}$1.01^{365}≈37.7834343329$$0.99^{365}≈0.02551796445$相信坚持的力量!