方法一:先合并再排序
python
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.
"""
# 先合并
for i in range(m, m+n):
nums1[i] = nums2[i - m]
# 再排序
nums1.sort()
方法二:从尾部按序插入表
python
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.
"""
pos_1, pos_2 = m, n
count = 0
while pos_1 > 0 and pos_2 > 0:
# 从nums1的末尾开始填入数字
pos = m + n - count - 1
if nums1[pos_1 - 1] <= nums2[pos_2 - 1]:
# 最大值出现在nums2的指针处,将值填入,并将pos2指针向前偏移
nums1[pos] = nums2[pos_2 - 1]
pos_2 -= 1
else:
# 最大值出现在nums1的指针处,将值填入,并将pos2指针向前偏移
nums1[pos] = nums1[pos_1 - 1]
pos_1 -= 1
# 已填入的个数+1
count += 1
if not pos_1:
# nums2中还有数据没有填入
nums1[:pos_2] = nums2[:pos_2]