88. 合并两个有序数组bahttps://leetcode.cn/problems/merge-sorted-array/
| 2023-8-13
0  |  阅读时长 0 分钟
Date
Aug 13, 2023
need_review
need_review
type
undo
undo
难度
简单
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
示例 1:
示例 2:
示例 3:
提示:
  • nums1.length == m + n
  • nums2.length == n
  • 0 <= m, n <= 200
  • 1 <= m + n <= 200
  • 109 <= nums1[i], nums2[j] <= 109
进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?

解法1
说白了就是递增嘛. 为防止溢出, nums1的长度就是结果的长度(预留空位补0)
通过m和n就知道了nums1和nums2的数字存储的位置, 可以使用双指针框定位置. 对比双方元素大小, 从nums2提取元素插入nums1的时候需要将数字后移.
时间复杂度
代码1
notion image
简化版代码, 内存差距极小所以浮动巨大, 这里将nums1的右指针简化并将nums1的长度赋值(防止每次循环都调用len()函数)
notion image
解法2
外加一个列表保存数组, 花费了空间复杂度
时间复杂度, 空间复杂度
notion image
解法3
直接合并后排序
时间复杂度
notion image
解法4
双指针, 倒过来遍历, 类似于解法1, 但是需要移动的元素减少
  • Giscus
目录