【leetcode】88.合并两个有序数组js

题目

代码

我思路比较简单粗暴,直接把nums2拼到nums1后面一半全是0的地方,之后调用array的sort。

这个的时间复杂度是O(nlogn)。

javascript 复制代码
/**
 * @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) {
    if (n === 0) return
    let ptr2 = 0
    for (let i = m; i < nums1.length; i++) {
        nums1[i] = nums2[ptr2]
        ptr2++
    }
    nums1.sort((a, b) => a - b)
};

题解代码学习

原题解链接(有画解):https://leetcode.cn/problems/merge-sorted-array/solutions/13005/hua-jie-suan-fa-88-he-bing-liang-ge-you-xu-shu-zu-/

因为 nums1 的空间都集中在后面,所以从后向前处理排序 的数据会更好,节省空间,一边遍历一边将值填充进去。

设置指针 len1 和 len2 分别指向 nums1 和 nums2 的有数字尾部,从尾部值开始比较遍历,同时设置指针 len 指向 nums1 的最末尾,每次遍历比较值大小之后,则进行填充。

当 len1<0 时遍历结束,此时 nums2 中海油数据未拷贝完全,将其直接拷贝到 nums1 的前面,最后得到结果数组。

时间复杂度:O(m+n)

javascript 复制代码
/**
 * @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) {
    let p = m - 1, q = n-1, tail = m + n - 1
    let cur
    while (p > -1 || q > -1) {
        if (p === -1) {
            cur = nums2[q]
            q--
        } else if (q === -1) {
            cur = nums1[p]
            p--
        } else if (nums1[p] >= nums2[q]) {
            cur = nums1[p]
            p--
        } else if (nums1[p] < nums2[q]) {
            cur = nums2[q]
            q--
        }
        nums1[tail] = cur
        tail --
    }
    return nums1
};
相关推荐
罗西的思考2 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer2 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
高晶4 小时前
无乘法器实现LC二阶滤波器:基于移位运算的快速算法与四种精度推导
算法·设计模式·程序员
ysbfsy4 小时前
大数计算思路
算法
高晶4 小时前
主从自动分配算法:平均值乘以设备数一半的选举基准值解析
算法·设计模式·程序员
学电子她就能回来吗4 小时前
LeetCode Hot 100|普通数组专题学习笔记(零基础版)
笔记·算法·leetcode
用户老李4 小时前
反向传播计算梯度举例
算法
niyongsheng4 小时前
多智能体连续时间内路径规划:AA-SIPP(m) 的 Rust 实现与算法
算法·rust·机器人
302wanger5 小时前
DeepSeek-V4.1-Flash-1017 免费用到1024,速来
算法
lisw056 小时前
微分与积分的本质区别解析
算法·数学建模·极限编程