三指针
有两个指针分别指向两个数组各自的最大元素,第三个指针指向全局最大元素
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.
"""
p = m - 1; q = m + n - 1 # p,q分别指向原始nums1最大值和全局最大值
r = n - 1 # r指向nums2最大值
while p >= 0 and r >= 0:
# 每次比较数组的最大元素,较大者作为全局最大放到nums1最后,然后索引往前一格
if nums1[p] > nums2[r]:
nums1[q] = nums1[p]
p -= 1
q -= 1
else:
nums1[q] = nums2[r]
r -= 1
q -= 1
# 当p>=0,而r<0,nums1前p+1个数是全局最小,则不用改nums1
# 当p<0而r>=0,nums2前r+1个数是全局最小,将其复制到nums1
while r >= 0:
nums1[q] = nums2[r]
q -= 1
r -= 1