给定两个有序整数数组 nums1 和 nums2将 nums2 合并到 nums1 中使得 num1 成为一个有序数组。 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间空间大小大于或等于 m + n来保存 nums2 中的元素。 输入 nums1 = 123000 m = 3 nums2 = 256 n = 3
可以使用双指针的方法来解决这个问题。
首先,我们初始化两个指针,分别指向 nums1 和 nums2 的末尾。然后,我们从 nums1 的末尾开始,依次比较 nums1 和 nums2 的元素大小,并将较大的元素放入 nums1 的末尾。然后,将指针向前移动一位。重复这个过程,直到将 nums2 中的所有元素都放入 nums1 中。
具体的实现步骤如下:
- 初始化两个指针 p1 和 p2,分别指向 nums1 的 m-1 位置和 nums2 的 n-1 位置。
- 初始化一个指针 p,指向 nums1 的 m+n-1 位置。
- 从 p1 和 p2 开始,比较 nums1[p1] 和 nums2[p2] 的大小。
- 如果 nums1[p1] 大于 nums2[p2],将 nums1[p1] 放入 nums1[p] 的位置,并将 p1 向前移动一位。
- 如果 nums1[p1] 小于等于 nums2[p2],将 nums2[p2] 放入 nums1[p] 的位置,并将 p2 向前移动一位。
- 将 p 向前移动一位。
- 重复步骤 3 和 4,直到 p1 或 p2 小于 0。
- 如果 p1 小于 0,说明 nums1 中的元素已经都放入了正确的位置,只需要将 nums2 中剩下的元素放入 nums1 中。
- 将 nums2 中剩下的元素从位置 p2 开始,依次放入 nums1 中,直到 p2 大于等于 0。
- 如果 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]
``
原文地址: https://www.cveoy.top/t/topic/ixph 著作权归作者所有。请勿转载和采集!