跟着瓶子君学前端 -- JavaScript数组(2)

本文介绍了一种合并两个有序数组的方法,通过从后向前比较两个数组的元素并将较大值放入目标数组的方式实现。此方法适用于数组长度固定的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

合并两个有序数组

        解题思路

        

nums、nums2有序,吧nums2全部合并到nums1,则合并后的nums1长度为m+n

从下标m+n-1的位置填充nums1,比较nums1[len1] 与nums2[len2]的大小,大值写入nums1[len[]

        即  nums1[len1] >= nums2[len2] ,nums1[len--] = nums1[len1--],由于写入成功以后,下标自动减一,继续往前比较

        否则nums1[len--] = nums2[len2--]

边界条件是

        若 len1 < 0 即len >= 0 此时nums1已重新写入,nums2还未合并完,仅仅将需要的nums2的剩余的元素(0...len)写入nums2,写入后合并完成

        若len2 < 0 此时nums2已经全部合并到了nums1合并完成

const merge = function(nums1, nums2, m, n) {
    let len1 = m-1, len2 = n - 1, len = m + n -1;
    while(len2 > 0) {
        if(len1 < 0) {
            nums1[len--] = nums2[len2--]
            continue
        }
        nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--]
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值