Skip to content

88 合并两个有序数组

解决方式

python
def merge(nums1, m, nums2, n):
    """
    合并两个有序数组到 nums1 中。
    :param nums1: 第一个有序数组,长度为 m + n
    :param m: nums1 中的有效元素个数
    :param nums2: 第二个有序数组,长度为 n
    :param n: nums2 中的元素个数
    """
    p1 = m - 1  # nums1 的最后一个有效元素
    p2 = n - 1  # nums2 的最后一个元素
    p = m + n - 1  # nums1 的最后一个位置

    # 从后向前合并
    while p1 >= 0 and p2 >= 0:
        if nums1[p1] > nums2[p2]:
            nums1[p] = nums1[p1]
            p1 -= 1
        else:
            nums1[p] = nums2[p2]
            p2 -= 1
        p -= 1

    # 如果 nums2 中还有剩余元素,直接复制到 nums1 中
    nums1[:p2 + 1] = nums2[:p2 + 1]

# 测试
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
merge(nums1, m, nums2, n)
print(nums1)  # 输出: [1, 2, 2, 3, 5, 6]

复杂度

时间复杂度:O(m+n)
空间复杂度:O(1)