88. 合并两个有序数组

题目描述

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

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:

输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

解法1

混合插入有序数组,由于两个数组都是有序的,所有只要按顺序比较大小即可。题目中说了nums1数组有足够大的空间,说明我们不用resize数组,又给了我们m和n,那就知道了混合之后的数组的大小。

  1. 从nums1和nums2数组的末尾开始一个一个比较,
  2. 把较大的数,按顺序从后往前加入混合之后的数组末尾。
  3. 需要三个变量i,j,k,分别指向nums1,nums2,和混合数组的末尾。
  4. 进行while循环,如果ij都大于0,
    1. 如果nums1[i] > nums2[j],说明要先把nums1[i]加入混合数组的末尾,加入后ki都要自减1;
    2. 反之就把nums2[j]加入混合数组的末尾,加入后kj都要自减1。
  5. 循环结束后,有可能i或者j还大于等于0,若j大于0,那么我们还需要继续循环,将nums2中的数字继续拷入nums1。若是i大于等于0,那么就不用管,因为混合数组本身就放在nums1中,参见代码如下:
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, j = m-1, n-1
        k = - 1
        while i >= 0 and j >= 0:
            # 取出较大的值放到nums1的末尾
            if nums1[i] > nums2[j]:
                nums1[k] = nums1[i]
                i -= 1
                k -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
                k -= 1

        # 如果nums2有剩余,直接加到nums1上
        while j >= 0:
            nums1[k] = nums2[j]
            j -= 1
            k -= 1            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值