第8天 合并两个有序数组
今日任务:88. 合并两个有序数组 理解其中的逆向思维,提交第二周学习小结
题意:
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
说明:
最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
题目链接: https://leetcode.cn/problems/merge-sorted-array/
视频链接: https://www.bilibili.com/video/BV1Gr16B2EGf/
核心思路:逆向双指针(最优 O(m+n))
• 从尾部往前放,避免覆盖未处理元素
• 指针 i = m-1、j = n-1、p = m+n-1
• 谁大谁放末尾,指针左移
• 最后把 nums2 剩余元素复制完
代码实现
学习小结要点
• 掌握逆向双指针思想,空间 O(1)
• 边界:m=0、n=0、一数组全更大
• 对比:正向需临时数组,逆向更高效
