码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2022-9-7合并k个已排序的链表---困难


    上链接:2022-9-7

    合并k个已排序的链表_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=M85Bhttps://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6人生第一次写出来一个 “较难” 类型的题!!!谨此纪念!

    目录

    题目描述:

    解决思路:


    题目描述:

    合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

    范围:

    节点总数>=0  、链表个数 >= 1 、 链表长度 >= 1

    示例1:

    输入:[{1,2,3},{4,5,6,7}]

    返回值:{1,2,3,4,5,6,7}

    示例2:

    输入:[{1,2},{1,4,5},{6}]

    返回值:{1,1,2,4,5,6}

    初始代码:

    1. import java.util.*;
    2. public class Solution {
    3. public ListNode mergeKLists(ArrayList lists) {
    4. }
    5. }

    解决思路:

    1、先写一个功能函数merge,能够将两个有序链表合并成一个有序链表

    2、按照顺序 一个个合并每一个链表!

    失误点:时间复杂度过高!代码运算超时!

    如何解决:  利用归并的思想!

    • step 1:从链表数组的首和尾开始,每次划分从中间开始划分,划分成两半,得到左边n/2个链表和右边n/2个链表。
    • step 2:继续不断递归划分,直到每部分链表数为1.
    • step 3:将划分好的相邻两部分链表,按照两个链表合并的方式合并,合并好的两部分继续往上合并,直到最终合并成一个链表。
    1. import java.util.*;
    2. public class Solution {
    3. private ListNode merge(ListNode list1, ListNode list2) {
    4. if (list1 == null && list2 == null) {
    5. return null;
    6. } else if (list1 != null && list2 == null) {
    7. return list1;
    8. } else if (list1 == null) {
    9. return list2;
    10. }
    11. ListNode ret = new ListNode(0);
    12. ListNode cur = ret;
    13. while (list1 != null && list2 != null) {
    14. if (list1.val <= list2.val) {
    15. ListNode node = new ListNode(list1.val);
    16. cur.next = node;
    17. list1 = list1.next;
    18. } else {
    19. ListNode node = new ListNode(list2.val);
    20. cur.next = node;
    21. list2 = list2.next;
    22. }
    23. cur = cur.next;
    24. }
    25. if (list1 == null) {
    26. cur.next = list2;
    27. } else {
    28. cur.next = list1;
    29. }
    30. return ret.next;
    31. }
    32. //!!时间超时的原本代码
    33. // public ListNode mergeKLists(ArrayList lists) {
    34. // if (lists.isEmpty()){
    35. // return null;
    36. // }
    37. // ListNode[] arr = new ListNode[lists.size()];
    38. // lists.toArray(arr);
    39. // int index = arr.length;
    40. // ListNode ret = merge(arr[index-1],arr[index-2]);
    41. // index-=3;
    42. // while(index>=0){
    43. // ret=merge(ret,arr[index]);
    44. // index--;
    45. // }
    46. // return ret;
    47. // }
    48. //下面是改进后的代码
    49. public ListNode mergeKLists(ArrayList lists) {
    50. ListNode[] arr = new ListNode[lists.size()];
    51. lists.toArray(arr);
    52. return merge1(arr, 0, arr.length - 1);
    53. }
    54. private ListNode merge1(ListNode[] arr, int left, int right) {
    55. if (left>right){
    56. return null;
    57. }else if (left==right){
    58. return arr[left];
    59. }
    60. int mid = (left+right)/2;
    61. //重点要读懂这一句!!
    62. return merge(merge1(arr,left,mid),merge1(arr,mid+1,right));
    63. }
    64. }

  • 相关阅读:
    less 里面的calc 和 运算符有什么区别 ?
    Vue3-ref、reactive函数的watch
    SpringBoot的静态资源怎么导入
    Nevrona Rave Reports基于报表库
    【深度学习环境配置】windows出现出现‘git‘ 不是内部或外部命令,也不是可运行的程序
    VTK 标注类Widget 文字标注 vtkCaptionWidget
    使用 JCommander 解析命令行参数
    软考 系统架构设计师 简明教程 | 系统设计
    【C++学习第六讲】第一章练习题(含源代码)
    蓝桥杯原题
  • 原文地址:https://blog.csdn.net/qq_52328493/article/details/126753663
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号