leetcode 88. 合并两个有序数组

在这里插入图片描述

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    // 因为最后n位都是0, 所以我们总最后开始重排不会对前面产生不好的影响
    // 双指针法, i初始指向nums1自身数组末尾, j初始指向nums2数组末尾
    let i = m-1, j = n-1, k = m+n-1;
    // nums1或者num2遍历完毕就跳出循环, 把剩下的补充在前面
    while(i>=0 && j>=0){
        // 因为要求最后是非递减顺序, 所以我们倒序重排时候, 重大到小添加
        if(nums1[i] > nums2[j]){
            nums1[k--] = nums1[i--];
        }else{
            nums1[k--] = nums2[j--];
        }
    }
    // 1、如果nums1原始数组在上面while循环内没有被遍历完. nums2被遍历完了
    //    因为是倒序的, 所以nums1前面剩下的未遍历数据就不做处理, 直接得到答案
    // 2、但如果num1被遍历完了, nums2两种情况: 有剩余或者没有, 再用while对nums2可能剩下的数据处理
    while(j>=0){
        nums1[k--] = nums2[j--]
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六时二一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值