2021-08-09 LeetCode:88. 合并两个有序数组 Python解法

88. 合并两个有序数组

给你两个有序整数数组 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]

  1. 常规解法
    • 删除占空间的’0’
    • 然后再追加nums2数组
    class Solution:
        def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
            """
            Do not return anything, modify nums1 in-place instead.
            """
            for i in range(n):
                nums1.pop()
            for i in nums2:
                nums1.append(i)
            return nums1.sort()
    
    2021-08-09 LeetCode:88. 合并两个有序数组 Python解法_第1张图片
  • 优化
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        for i in range(n):
            nums1.pop()
        nums1+=nums2
        return nums1.sort()

时间缩短了8ms
2021-08-09 LeetCode:88. 合并两个有序数组 Python解法_第2张图片

  1. 冒泡排序
class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        """
        Do not return anything, modify nums1 in-place instead.
        """
        for i in range(n):
            nums1.pop()
        nums1+=nums2
        for i in range(len(nums1)-1,0,-1):
            exchange=False
            for j in range(0,i):
                if nums1[j] > nums1[j+1]:
                    nums1[j],nums1[j+1]=nums1[j+1],nums1[j]
                    exchange=True
            if not exchange:
                return nums1
        return nums1

2021-08-09 LeetCode:88. 合并两个有序数组 Python解法_第3张图片

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