力扣 NO.88 合并两个有序数组

题目链接

题目详情

在这里插入图片描述
在这里插入图片描述

方法一:利用归并排序中,合并有序数组的思想

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.
        """
        # 主要参考归并排序的思路,将符合条件的nums2中的值插入nums1中
        idx1 = idx2 = 0
        while idx1<m+n and idx2<n: # nums1中会预留出nums2数量(n)的0用来占位,所以idx1<m+n,否则n<m时循环可能提前结束,比如:[4,0,0,0,0,0] 1 [1,2,3,5,6] 5 ,错误输出:[1,4,2,3,5,6]
            if nums1[idx1] > nums2[idx2]:
                nums1.insert(idx1,nums2[idx2])
                idx1+=1
                idx2+=1
            else:
                idx1+=1
        #程序到此有两种情况:nums2已经完全插入nums1中,此时需要切除多余的占位符0;nums1已经排好序,nums2还有数据因为占位符0比nums2后面的数小而未插入,此时需要把nums2剩余的数据替换到nums1中的相应位置
        length = m+idx2
        nums1[length:] = nums2[idx2:]

方法二:直接数组合并 + sort()

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.
        """
        nums1[m:] = nums2
        nums1.sort() # 默认升序排列
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值