给两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
解法:
from typing import List
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.
"""
point1 = 0
num = 0
while m>0 and point1<m+n and nums2:
# 比较
if nums1[point1]<nums2[0]:
point1+=1
else:
temp = nums2.pop(0)
for i in range(m+n-1,point1-1,-1):
nums1[i]=nums1[i-1]
nums1[point1]=temp
num+=1
start_index = m+num
for index in range(start_index,m+n):
if nums2:
nums1[index] = nums2.pop(0)
if __name__ == '__main__':
nums1 = [1,2,3,0,0,0]
nums2 = [2,5,6]
m=3
n=3
Solution().merge(nums1,m,nums2,n)
print(nums1)
不需要额外的空间复杂度,但由于每次需要向后移动nums1数组元祖,时间复杂度较高,为O(m**2)。