目錄
1、leetcode21. 合併兩個有序鍊錶
2、leetcode23. 合併k個排序鍊錶
2.1、順序合併
2.2、分治演算法
對於兩個有序鍊錶的合併操作應用場景還是比較多的,如:鍊錶的歸併排序。
思路:分別遍歷兩個鍊錶,依次將頭節點值小的取出插入新的鍊錶中即可;
注意:當其中乙個鍊錶為空時,直接取另乙個鍊錶節點即可,兩個鍊錶均取完結束迴圈。
合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。public listnode mergetwolists(listnode l1, listnode l2) else if(l1 == null)else if(l2 == null)elseelse if(l2 == null)elseelse
}slow = slow.next;
}return dummy.next;
} }
//優化
public listnode mergetwolists(listnode l1, listnode l2) else if(l2 == null)elseelse
}curnode = curnode.next;
} return dummy.next;
}
示例:
輸入:[
1->4->5,
1->3->4,
2->6
]輸出: 1->1->2->3->4->4->5->6
迴圈進行兩兩合併,直至合成一條鏈為止public listnode mergeklists(listnode lists)
listnode head = null;
for(listnode list:lists)
return head;
}
//借助集合列表資料結構
public listnode mergeklists(listnode lists)
listlist = new arraylist<>();
listtmp = new arraylist<>();
collections.addall(list,lists);//陣列轉換成集合
while(list.size() > 1)
if((list.size()&1) == 1)
list.clear();
list.addall(tmp);
} return list.get(0); }
//覆蓋陣列中的舊資料,不在申請其他資料結構
public listnode mergeklists(listnode lists)
int len = lists.length;
while(len > 1)
if(i == len - 1)
len = index;
} return lists[0];
}
Git的一些騷操作
寫在前面 vim插入模式命令命令說明i 實現的是在游標之前的插入 i 大寫的i實現在游標所在行的最前面插入 a 實現在游標後插入 a 實現在游標所在行的行尾插入 o 實現在游標所在行的上方插入新行 o 是現在游標坐在行的下方插入新行 git中vim的命令 命令 說明 w 儲存編輯後的檔案內容,但不退...
鍊錶的一些操作
判斷兩個鍊錶是否有交點 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點 假設兩個鍊錶都不存在環 相交的煉表示意圖如下所示。兩個沒有環的鍊錶如果是相交於某一結點,如上圖所示,這個結點後面都是共有的。所以如果兩個鍊錶相交,那麼兩個鍊錶的尾結點的位址也是一樣的。程式實現時分別遍歷兩個單鏈表,直到尾結...
Mac OS 上的一些騷操作
本帖記錄個人在使用 mac 作業系統上的一些騷操作,不斷更新,以饗讀者。用雙指上下劃觸控板嗎?no,我們有更騷的操作 command 回到頂部 command 滾到底部 另外,fn 上滾一頁 fn 下滾一頁 fn home,回到頂部 fn end,滾到底部 有時候從網上看到不錯的文字想要貼上到 wo...