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
10
9
<= nums1[i], nums2[j] <= 10
9
进阶:你可以设计实现一个时间复杂度为
O(m + n)
的算法解决此问题吗?解法1
说白了就是递增嘛. 为防止溢出, nums1的长度就是结果的长度(预留空位补0)
通过m和n就知道了nums1和nums2的数字存储的位置, 可以使用双指针框定位置. 对比双方元素大小, 从nums2提取元素插入nums1的时候需要将数字后移.
时间复杂度
代码1

简化版代码, 内存差距极小所以浮动巨大, 这里将nums1的右指针简化并将nums1的长度赋值(防止每次循环都调用len()函数)

解法2
外加一个列表保存数组, 花费了空间复杂度
时间复杂度, 空间复杂度

解法3
直接合并后排序
时间复杂度

解法4
双指针, 倒过来遍历, 类似于解法1, 但是需要移动的元素减少