【排序】88.合并两个有序数组
题目链接: https://leetcode.cn/problems/merge-sorted-array/
详情:
这题看起来像是数组题而不是排序题。
分析:
言归正传,这题说了是有序数组,要求在nums1上原地修改。
所以我们就要从后往前遍历,这样的话,可以把前面的位置腾出地方,不需要用额外的存储空间。
代码:
class Solution: def merge(self, nums1, m, nums2, n) -> None: """ Do not return anything, modify nums1 in-place instead. """ # nums1, nums2的指针, 分别指向"最后一个元素" f_ptr, s_ptr = m-1, n-1 # 总指针, 指向nums真正的最后一个元素 r_ptr = len(nums1)-1 while r_ptr >= 0 and f_ptr >= 0 and s_ptr >= 0: if nums1[f_ptr] >= nums2[s_ptr]: nums1[r_ptr] = nums1[f_ptr] f_ptr -= 1 else: nums1[r_ptr] = nums2[s_ptr] s_ptr -= 1 r_ptr -= 1 while r_ptr >= 0 and s_ptr >= 0: nums1[r_ptr] = nums2[s_ptr] r_ptr -= 1 s_ptr -= 1
也可以这样:
class Solution: def merge(self, nums1, m: int, nums2, n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ for i in range(len(nums1)-1, -1, -1): if m >0 and n > 0: if nums1[m-1] > nums2[n-1]: nums1[i] = nums1[m-1] m -= 1 else: nums1[i] = nums2[n-1] n -= 1 elif m > 0: nums1[i] = nums1[m-1] m -= 1 elif n > 0: nums1[i] = nums2[n-1] n -= 1