合并K个升序链表(题号23)

思路:使用优先级队列来处理,省去了自己比较节点大小的步骤

1.遍历lists,先将每个链表的头节点都放入优先级队列中,队列会自动比较大小

2.定义一个新的链表dummyNode

3.然后利用poll()方法获取到最小的节点minNode,加入到新链表的后面

4.如果minNode.next != null,再把minNode.next放到队列中

重复步骤三和步骤四,直到队列中没有任何元素。

java 复制代码
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        Queue<ListNode> queue = new PriorityQueue<>((v1, v2) -> v1.val - v2.val);
        for (ListNode node: lists) {
            if (node != null) {
                queue.offer(node);
            }
        }
        ListNode dummyHead = new ListNode(0);
        ListNode tail = dummyHead;
        while (!queue.isEmpty()) {
            ListNode minNode = queue.poll();
            tail.next = minNode;
            tail = minNode;
            if (minNode.next != null) {
                queue.offer(minNode.next);
            }
        }
        return dummyHead.next;
    }
}

时间复杂度:O(kn*log(k))

空间复杂度:O(k)

看到此处即是情,别忘记点个赞哦。如果有其他问题,欢迎评论,共同探讨!!!

相关推荐
春弦_5 小时前
自用算法整理二
数据结构·算法·图论
xxxiugou12310 小时前
链表算法题精讲:从两数相加到K组翻转
数据结构·c++·算法·链表
凯瑟琳.奥古斯特14 小时前
力扣1015C++解法技巧
c++·算法·leetcode·链表·职场和发展
悠仁さん14 小时前
【算法C++】双指针(一)
数据结构·c++·算法
YukiRinLL14 小时前
字符串存储与 BF、KMP 匹配算法
数据结构·算法
INGNIGHT16 小时前
151 · 买卖股票的最佳时机 III(序列dp)
数据结构·算法·leetcode
Tisfy18 小时前
LeetCode 3644.排序排列:不对则与(脑筋急转弯)
数据结构·算法·leetcode·题解·位运算
H.莓飛19 小时前
【数据结构】快速排序专题
linux·服务器·c语言·数据结构·visual studio
重生之小比特20 小时前
【算法拾光】二分查找|在排序数组中查找元素的第一个和最后一个位置 + 搜索旋转排序数组
数据结构·算法·排序算法
YukiRinLL20 小时前
查找与排序算法:复杂度、稳定性
数据结构·算法·排序算法