欢迎访问宙启技术站
智能推送

如何使用Python函数来合并两个排序好的数组?

发布时间:2023-06-16 02:33:46

题目描述

给定两个已排序的数组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中,可以使用一个函数来实现这个操作,这个函数接收两个已排序的数组和它们的长度作为参数,返回合并后的有序数组。