【Leetcode】No88. 合并两个有序数组(Merge Sorted Array)

No88. 合并两个有序数组

题目

给你两个有序整数数组 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. 建立一层循环,循环标志量为nums1和nums2的当前索引,top和bottom表示当前值,比较top和bottom,若top不大于bottom,i加1;若top大于bottom,进行插入操作,注意要在结尾pop一个多余的0,j加1。
  2. 在循环外,判断是因何退出循环,若是nums1遍历结束,则需将nums2的剩余部分覆盖到nums1的对应部分。

解题代码(Python3)

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.
        """
        i,j = 0,0
        while i < m and j <n:
            top,bottom = nums1[i+j],nums2[j]
            if top <= bottom:
                i += 1
            #下插上
            else:
                nums1.insert(i+j,bottom)
                nums1.pop()
                j += 1
        else:
            #nums2接入nums1
            if i == m:
                nums1[i+j:] = nums2[j:]

复杂度分析:

  • 时间复杂度O(n^2) 一层循环加上insert方法
  • 空间复杂度O(1)

运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Xiao_Spring/article/details/113747900