算法训练营第八天|88. 合并两个有序数组

张开发
2026/4/21 5:23:41 15 分钟阅读

分享文章

算法训练营第八天|88. 合并两个有序数组
题意 给定一个链表返回链表开始入环的第一个节点。 如果链表无环则返回 null。为了表示给定链表中的环使用整数 pos 来表示链表尾连接到链表中的位置索引从 0 开始。 如果 pos 是 -1则在该链表中没有环。说明不允许修改给定的链表。题目链接https://leetcode.cn/problems/linked-list-cycle-ii/ 视频链接https://www.bilibili.com/video/BV1if4y1d7ob一、看到题目的第一想法之前做过“移除元素”和“长度最小子数组”对数组双指针有点感觉了。看到“合并两个有序数组”第一反应是再开一个新数组两个指针分别遍历 nums1 和 nums2谁小放谁。但题目要求原地修改 nums1而且 nums1 后面已经预留了 n 个 0。立刻想到应该从后往前填谁大谁放末尾这样不会覆盖 nums1 还没处理的元素。二、实现过程中遇到的困难1. 指针初始位置一开始想把 p1 放 m-1p2 放 n-1p 放 mn-1。但画图发现如果 p1 先走完剩下的 nums2 元素还没搬完需要单独用一个循环处理。2. 循环终止条件刚开始写成 while(p10 p20)结束后又忘记把 nums2 剩余元素拷进去导致示例通过但隐藏用例报错。三、今日收获心得· 逆向双指针是原地合并的精髓正着填会覆盖 nums1 有效数据倒着填完美利用预留空间。· 数组题要时刻关注下标范围· 链表和数组操作思维互补链表靠改指针指向数组靠下标赋值。链表题习惯用“虚拟头节点”避免边界问题数组题则常用“从后往前”或“多指针”来原地操作。我的代码

更多文章