【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
};
相关推荐
生成论实验室3 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres8213 小时前
算法复键——树状数组
数据结构·算法
H178535090963 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
不会就选b3 小时前
算法日常・每日刷题--<二分查找>3
算法
绿算技术4 小时前
Mooncake 与绿算ForinnBase GroundPool如何联手打破推理僵局?
科技·算法·架构
-森屿安年-4 小时前
63. 不同路径 II
c++·算法·动态规划
老余捞鱼4 小时前
线性回归实战:5步验证你的量化因子是否真有效
算法·金融·回归·线性回归·ai量化
想吃火锅10054 小时前
【leetcode】121.买卖股票的最佳时机js/c++
算法·leetcode·职场和发展
码云数智-大飞5 小时前
RAII 与智能指针深度拆解
java·前端·算法