トピックの詳細
方法1:マージソートで順序付けられた配列をマージするというアイデアを使用する
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.
"""
# 主要参考归并排序的思路,将符合条件的nums2中的值插入nums1中
idx1 = idx2 = 0
while idx1<m+n and idx2<n: # nums1中会预留出nums2数量(n)的0用来占位,所以idx1<m+n,否则n<m时循环可能提前结束,比如:[4,0,0,0,0,0] 1 [1,2,3,5,6] 5 ,错误输出:[1,4,2,3,5,6]
if nums1[idx1] > nums2[idx2]:
nums1.insert(idx1,nums2[idx2])
idx1+=1
idx2+=1
else:
idx1+=1
#程序到此有两种情况:nums2已经完全插入nums1中,此时需要切除多余的占位符0;nums1已经排好序,nums2还有数据因为占位符0比nums2后面的数小而未插入,此时需要把nums2剩余的数据替换到nums1中的相应位置
length = m+idx2
nums1[length:] = nums2[idx2:]
方法2:直接配列マージ+ sort()
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.
"""
nums1[m:] = nums2
nums1.sort() # 默认升序排列