如何使用Python函数来合并两个排序好的数组?
题目描述
给定两个已排序的数组nums1和nums2,将它们合并成一个已排序的数组nums3。
示例:
输入:
nums1 = [1, 2, 3, 0, 0, 0], m = 3
nums2 = [2, 5, 6], n = 3
输出:
[1, 2, 2, 3, 5, 6]
题目分析
这道题考察了数组、排序等基础知识,重点在于如何将两个有序数组合并成一个有序数组。可以利用归并排序的思想,将两个数组从头开始比较大小,将较小的数放入新的数组中,并移动指针,重复此过程直到所有数字都被放入新的数组中。
在Python中,可以使用一个函数来实现这个操作,这个函数接收两个已排序的数组和它们的长度作为参数,返回合并后的有序数组。
代码实现
下面是Python代码实现:
def merge(nums1, m, nums2, n):
"""
Merge two sorted arrays into a new sorted array.
:param nums1: list[int]
:param m: int
The length of nums1.
:param nums2: list[int]
:param n: int
The length of nums2.
:return: list[int]
The merged sorted array.
Example:
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
merge(nums1, m, nums2, n) -> [1, 2, 2, 3, 5, 6]
"""
nums3 = [0] * (m + n) # 初始化新数组
p1, p2, p3 = 0, 0, 0 # 初始化指针
while p1 < m and p2 < n: # 当两个数组长度都没遍历完时
if nums1[p1] < nums2[p2]:
nums3[p3] = nums1[p1]
p1 += 1
else:
nums3[p3] = nums2[p2]
p2 += 1
p3 += 1
while p1 < m: # 如果nums1还有剩余
nums3[p3] = nums1[p1]
p1 += 1
p3 += 1
while p2 < n: # 如果nums2还有剩余
nums3[p3] = nums2[p2]
p2 += 1
p3 += 1
return nums3
测试
下面可以进行一些测试:
nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
print(merge(nums1, m, nums2, n)) # [1, 2, 2, 3, 5, 6]
nums1 = [1, 2, 3, 4, 5]
m = 5
nums2 = []
n = 0
print(merge(nums1, m, nums2, n)) # [1, 2, 3, 4, 5]
nums1 = []
m = 0
nums2 = [1, 2, 3]
n = 3
print(merge(nums1, m, nums2, n)) # [1, 2, 3]
nums1 = [1, 2, 3]
m = 0
nums2 = [4, 5, 6]
n = 3
print(merge(nums1, m, nums2, n)) # [1, 2, 3, 4, 5, 6]
结论
本篇博客介绍了如何使用Python函数来合并两个排序好的数组。题目考察了数组、排序等基础知识,可以利用归并排序的思想来解决这个问题。在Python中,可以使用一个函数来实现这个操作,这个函数接收两个已排序的数组和它们的长度作为参数,返回合并后的有序数组。
