BM5 题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

感受进步:

well done~~!! 这道题是我自己想出来怎么实现了,中途小根堆因为放置了所有列表元素导致内存异常了,之后,看了讲解视频,调整了小根堆的元素进出,只放入k个元素,同时,再获取当前链表的下个节点,放入小根堆比较,这样减少了很多比较的工作和内存大小的占用等。

解题思路:

1、使用一个最小根堆,用for循环放入链表列表的头节点

2、定义新链表节点newHead 和 curr 赋值移动节点

3、遍历小根堆,取出最小节点存入curr,同时拿出链表的下个节点的放入小根堆比较

4、遍历完后,就获取到了新的节点返回就可以了

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     *
     * @param lists ListNode类ArrayList
     * @return ListNode类
     */
    public ListNode mergeKLists (ArrayList<ListNode> lists) {
        if (lists == null || lists.size() == 0) {
            return null;
        }
        // 创建一个小根堆,用于去除队列中的最小值
        Comparator<ListNode> cmp = new Comparator<ListNode>() {
            @Override
            public int compare(ListNode o1, ListNode o2) {
                return  o1.val - o2.val;
            }
        };
        PriorityQueue<ListNode> q = new PriorityQueue<ListNode>(cmp);

        // 遍历链表列表,取出列表首元素
        // 为什么不是取出所有元素?因为节省内存,如果元素很对小根堆会内存溢出
        for (int i = 0; i < lists.size(); i++) {
            ListNode temp = lists.get(i);
            if(temp!=null) {
                q.offer(temp);
            }
        }

        // 创建新表头
        ListNode newHead = new ListNode(-1);

        // 遍历所有新元素,同时取出列表下个元素,进行比较
        ListNode curr = newHead;
        while(!q.isEmpty()) {
            ListNode temp = q.poll();
            if(temp.next!=null){
                q.offer(temp.next);
            }
            curr.next = temp;
            curr = curr.next;
        }

        return newHead.next;
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
温州头等大孝子:你们的确很幸福,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
字节跳动开奖368人在聊
点赞 评论 收藏
分享
为啥美团有的笔试可以AI做题啊。。。。我们怎么就不行
碧海蓝涛:因为ai也做不出来
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务