📅  最后修改于: 2023-12-03 15:35:56.576000             🧑  作者: Mango
在编写程序时,我们经常需要将两个排序好的数组合并到一个新的排序数组中。这个过程被称为数组合并。在本文中,将讨论几种不同的算法,并给出示例代码。
给定两个已经排序好的数组 nums1
和 nums2
,将其合并到一个新的数组 nums3
中并返回。我们假设 nums1
和 nums2
均不为空且长度相等。
暴力法是最简单的方法之一。我们可以通过遍历两个数组,将元素依次插入到新的数组中,并排序。
代码示例:
def merge(nums1, nums2):
nums3 = nums1 + nums2
nums3.sort()
return nums3
时间复杂度为 $O(nlogn)$。
双指针法可以在不用额外的空间下完成数组的合并。我们可以使用两个指针分别指向两个数组的头部,比较两个指针所指向的元素大小,并将较小的元素插入到新数组中。
代码示例:
def merge(nums1, nums2):
nums3 = []
i, j = 0, 0
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]:
nums3.append(nums1[i])
i += 1
else:
nums3.append(nums2[j])
j += 1
nums3 += nums1[i:]
nums3 += nums2[j:]
return nums3
时间复杂度为 $O(n)$。
数组合并是编写程序时常见的任务之一。在本文中,我们介绍了两种不同的算法来完成数组合并。暴力法简单易懂,但其时间复杂度较高。双指针法在空间复杂度上有所优化,并且时间复杂度为 $O(n)$,更适合大规模数组的合并任务。