LeetCode20—— 合并两个有序数组

LeetCode20—— 合并两个有序数组

前言:

LeetCode20—— 合并两个有序数组_第1张图片


题目内容:

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array


python实现:

方法一:

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        i = m - 1  # 指针i用于存放nums1从右到左的指针
        j = n - 1  # 指针j用于存放nums2从右到左的指针
        pos = m + n - 1  # 指针pos用于存储比较i和j指针指向树枝的较大值

        while i >= 0 and j >= 0:
            # 如果nums1的最右边参数小于等于nums2最右边参数,将nums2最右边的值存储到pos所指向的位置,j指针和pos指针都向左移一位
            if nums1[i] <= nums2[j]:
                nums1[pos] = nums2[j]
                pos -= 1
                j -= 1
            # 如果nums1的最右边参数大于nums2最右边参数,将nums1最右边的值存储到pos所指向的位置,i指针和pos指针都向左移一位
            else:
                nums1[pos] = nums1[i]
                pos -= 1
                i -= 1
        # 如果最后nums1的i指针没有遍历到0,因为nums1是有序的。并且此时nums2的参数都已挪到了nums1,所以不用处理
        # 如果最后nums2的j指针没有遍历到0,则需要将nums2剩余的参数按顺序填充到nums1开头
        if j >= 0:
            for z in range(0, len(nums2[:j + 1])):
                nums1[z] = nums2[z]

        # 返回nums1则为排序后的结果
        return nums1


if __name__ == '__main__':
    nums1 = [1,2,3,0,0,0]
    m = 3
    nums2 = [2,5,6]
    n = 3
    aa = Solution()
    print(aa.merge(nums1, m, nums2, n))

方法二:

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """  
        nums1[m:] = nums2
        nums1.sort()
        return nums1

if __name__ == '__main__':
    nums1 = [1,2,3,0,0,0]
    m = 3
    nums2 = [2,5,6]
    n = 3
    aa = Solution()
    print(aa.merge(nums1, m, nums2, n))
    

你可能感兴趣的:(LeetCode,leetcode,python)