23. 合并K个升序链表
#
题目给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
示例 2:
示例 3:
提示:
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
按 升序 排列lists[i].length
的总和不超过10^4
#
思路按说该用堆来做的,但 go 里建堆太复杂了,所以用了分治法完成。
将 k 个链表分为两个两个的链表互相合并(合并两个链表的题是 21. 合并两个有序链表),如果是奇数个,则多出来的轮空一下。
不过倒是用 C++ 写了堆版本的代码。
#
代码#
分治(go)#
堆(C++)C++ 中的优先队列本身就是基于堆的,因此直接调用就好