本题是本人字节跳动一面考的算法题
原题是有序数组,一时没想到怎么解决数组的问题,但是如果给的是有序链表数组,则可以用下面的方法解决 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创建一个大小为k的最小堆,堆中元素为k个链表中的每个链表的第一个元素
重复下列步骤
每次从堆中取出最小元素(堆顶元素),并将其存入输出数组中
用堆顶元素所在链表元素的下一元素将堆顶元素替换掉,
初始化最小堆的时间复杂度O(k),总共有kn次循环,每次循环调整最小堆的时间复杂度是O(logk)
,所以总的时间复杂度是O(knlogk)
import java.util.ArrayList;
import java.util.Comparator;
import java.util.PriorityQueue; public class 合并K个有序数组 {
public static ListNode merge(ListNode[] arr) {
int k = arr.length;
ListNode dumy = new ListNode(-1);
ListNode p = dumy; PriorityQueue<ListNode> maxHeap = new PriorityQueue<>(k, new Comparator<ListNode>() {
@Override
public int compare(ListNode o1, ListNode o2) {
return o1.val - o2.val;
}
}); for (int i = 0; i < k; i++)
maxHeap.offer(arr[i]); while (!maxHeap.isEmpty()) {
ListNode tmp = maxHeap.poll();
if (tmp.next != null)
maxHeap.offer(tmp.next);
p.next = tmp;
p = p.next;
}
return dumy.next;
} //测试代码
public static void main(String[] args) {
ListNode a1 = new ListNode(1);
a1.next = new ListNode(2);
a1.next.next = new ListNode(3);
a1.next.next.next = new ListNode(100); ListNode b1 = new ListNode(1);
b1.next = new ListNode(2);
b1.next.next = new ListNode(3); ListNode c1 = new ListNode(2);
c1.next = new ListNode(3);
c1.next.next = new ListNode(5); ListNode[] arr = {a1, b1, c1}; ListNode res = merge(arr);
while (res!= null) {
System.out.print(res.val + " ");
res = res.next;
}
}
}

合并K个有序数组(链表)【字节跳动面试算法题】的更多相关文章

  1. 合并k个有序数组

    给定K个有序数组,每个数组有n个元素,想把这些数组合并成一个有序数组 可以利用最小堆完成,时间复杂度是O(nklogk),具体过程如下: 创建一个大小为n*k的数组保存最后的结果创建一个大小为k的最小 ...

  2. 合并K个有序数组-Java

    package com.rao.algorithm; import java.util.Arrays; /** * @author Srao * @className MergeK * @date 2 ...

  3. 【leetcode-88,21】 合并两个有序数组/链表

    合并两个有序数组 (easy,1过) 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nu ...

  4. Merge k Sorted Arrays【合并k个有序数组】【优先队列】

    Given k sorted integer arrays, merge them into one sorted array. Example Given 3 sorted arrays: [ [1 ...

  5. leetcode:Reverse Nodes in k-Group(以k为循环节反转链表)【面试算法题】

    题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified list ...

  6. [LeetCode] Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 这 ...

  7. leetcode python 012 hard 合并k个有序链表

    #[LeetCode] Merge k Sorted Lists 合并k个有序链表(升序) import numpy as npimport time class Node(object):    d ...

  8. 023 Merge k Sorted Lists 合并K个有序链表

    合并K个有序链表,并且作为一个有序链表的形式返回.分析并描述它的复杂度. 详见:https://leetcode.com/problems/merge-k-sorted-lists/descripti ...

  9. [LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

随机推荐

  1. 利用scrollintoview方法模拟聊天室收到新消息

    这段时间再写一个聊天的功能,基本的原理已经通了,剩下的就是细化功能和实现了.原理通了不代表就能解决了这个问题,今天就遇到了一个小问题,就是在接收到新的消息以后,最新的消息不能显示在消息区域,而是跑到了 ...

  2. 20, CSS 定义选择器

    1. ID 与类 2. 层叠 3. 分组 4. 继承 5. 上下文选择器 6. 子类选择器 7. 其他选择器 8. 结构与注释 20.1 ID 与类 选择器是用于控制页面设计的样式.即 ID 选择器何 ...

  3. qduoj前端二次开发简略流程

    为缩减篇幅,已略去nodejs.git等软件安装操作,若有疑问请搜索相关教程. 为区分win和ubuntu的命令,作如下约定: $ cd //以$标记win下命令 # cd //以#标记linux命令 ...

  4. LEDAPS1.3.0版本移植到windows平台----HuSr大气校正模块

    这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuSr是将LEDAPS项目中的TM/ET ...

  5. Android程序员的Flutter学习笔记

    作为忠实与较资深的Android汪, 最近抽出了一些时间研究了一下Google的亲儿子Flutter, 尚属皮毛, 只能算是个简单的记录吧. Google自2017年第一次提出Flutter, 到20 ...

  6. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  7. po编程——自动化测试面试必问

    先来看一个在腾讯课堂首页搜索机构的操作步骤: 1:首先打开腾讯课堂的首页:https://ke.qq.com 2:点击课程或机构的下拉选择图标 3:选择机构 4:在搜索框输入要搜索的机构名称 5:点击 ...

  8. QQ邮箱开启SMTP方法如何授权

    步骤一: 在打开的邮箱中心,进入设置 步骤二 从邮箱设置中心,进入帐户 步骤三 在这里可以看到POP3/SMTP服务被关闭了,因此客户端会收不到邮件,我们来开启它,查看该服务为已开启时,就可以用客户端 ...

  9. c/c++ 网络编程 使用getaddrinfo的单纯UDP 通信

    网络编程 使用getaddrinfo的单纯UDP 1,UDP发送端 2,UDP接收端 UDP发送端: #include <stdio.h> #include <unistd.h> ...

  10. 批处理基础知识-EXIT

    本文主要介绍批处理EXIT命令的使用. 阅读须知: 在开始阅读本文之前,您需要知道批处理CALL命令和ERRORLEVEL相关知识,若您没有接触过类似信息,建议goole或baidu. EXIT命令格 ...