码农知识堂 - 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. }

  • 相关阅读:
    将移位距离假设外推至3张图片
    计算机毕业设计Python+Django的银行取号管理系统
    通过IIS部署Flask项目
    岩土工程安全监测无线振弦采集仪在无线组网的关键要点
    nginx 配置git server http clone服务,并通过反向代理访问
    C++入门(2):缺省参数、函数重载、引用
    大语言模型(LLM)Token 概念
    第十三届蓝桥杯省赛 最优清零方案题解
    【Linux】万字总结Linux 基本指令,绝对详细!!!
    是测试训练后的best.pt吗,还是在results里面取平均值(标签-yolo|关键词-map)
  • 原文地址:https://blog.csdn.net/qq_52328493/article/details/126753663
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号