可以使用双指针的方法来解决这个问题。

首先,我们初始化两个指针,分别指向 nums1 和 nums2 的末尾。然后,我们从 nums1 的末尾开始,依次比较 nums1 和 nums2 的元素大小,并将较大的元素放入 nums1 的末尾。然后,将指针向前移动一位。重复这个过程,直到将 nums2 中的所有元素都放入 nums1 中。

具体的实现步骤如下:

  1. 初始化两个指针 p1 和 p2,分别指向 nums1 的 m-1 位置和 nums2 的 n-1 位置。
  2. 初始化一个指针 p,指向 nums1 的 m+n-1 位置。
  3. 从 p1 和 p2 开始,比较 nums1[p1] 和 nums2[p2] 的大小。
    • 如果 nums1[p1] 大于 nums2[p2],将 nums1[p1] 放入 nums1[p] 的位置,并将 p1 向前移动一位。
    • 如果 nums1[p1] 小于等于 nums2[p2],将 nums2[p2] 放入 nums1[p] 的位置,并将 p2 向前移动一位。
  4. 将 p 向前移动一位。
  5. 重复步骤 3 和 4,直到 p1 或 p2 小于 0。
  6. 如果 p1 小于 0,说明 nums1 中的元素已经都放入了正确的位置,只需要将 nums2 中剩下的元素放入 nums1 中。
    • 将 nums2 中剩下的元素从位置 p2 开始,依次放入 nums1 中,直到 p2 大于等于 0。
  7. 如果 p2 小于 0,说明 nums2 中的元素已经都放入了正确的位置,nums1 中的元素不需要做处理。

最后,nums1 中的元素就是合并后的有序数组。

以下是具体的实现代码:

def merge(nums1, m, nums2, n):
    p1 = m - 1
    p2 = n - 1
    p = m + n - 1
    
    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
    
    while p2 >= 0:
        nums1[p] = nums2[p2]
        p2 -= 1
        p -= 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]
``
给定两个有序整数数组 nums1 和 nums2将 nums2 合并到 nums1 中使得 num1 成为一个有序数组。 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间空间大小大于或等于 m + n来保存 nums2 中的元素。 输入 nums1 = 123000 m = 3 nums2 = 256 n = 3

原文地址: https://www.cveoy.top/t/topic/ixph 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录