No88. 合并两个有序数组
题目
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例1
- 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
- 输出:[1,2,2,3,5,6]
示例2
- 输入:nums1 = [1], m = 1, nums2 = [], n = 0
- 输出:[1]
思路:
- 建立一层循环,循环标志量为nums1和nums2的当前索引,top和bottom表示当前值,比较top和bottom,若top不大于bottom,i加1;若top大于bottom,进行插入操作,注意要在结尾pop一个多余的0,j加1。
- 在循环外,判断是因何退出循环,若是nums1遍历结束,则需将nums2的剩余部分覆盖到nums1的对应部分。
解题代码(Python3)
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
i,j = 0,0
while i < m and j <n:
top,bottom = nums1[i+j],nums2[j]
if top <= bottom:
i += 1
#下插上
else:
nums1.insert(i+j,bottom)
nums1.pop()
j += 1
else:
#nums2接入nums1
if i == m:
nums1[i+j:] = nums2[j:]
复杂度分析:
- 时间复杂度O(n^2) 一层循环加上
insert方法
- 空间复杂度O(1)