📜  两个排序的数组合并 (1)

📅  最后修改于: 2023-12-03 15:35:56.576000             🧑  作者: Mango

两个排序的数组合并

在编写程序时,我们经常需要将两个排序好的数组合并到一个新的排序数组中。这个过程被称为数组合并。在本文中,将讨论几种不同的算法,并给出示例代码。

题目描述

给定两个已经排序好的数组 nums1nums2,将其合并到一个新的数组 nums3 中并返回。我们假设 nums1nums2 均不为空且长度相等。

算法
方法一:暴力法

暴力法是最简单的方法之一。我们可以通过遍历两个数组,将元素依次插入到新的数组中,并排序。

代码示例:

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)$,更适合大规模数组的合并任务。