【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 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
Jerry3 小时前
LeetCode 383. 赎金信
算法
ai产品老杨3 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
Jerry3 小时前
LeetCode 454. 四数相加 II
算法
可编程芯片开发4 小时前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
Jerry4 小时前
LeetCode 202. 快乐数
算法
hans汉斯5 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Jerry5 小时前
LeetCode 349. 两个数组的交集
算法
YuK.W6 小时前
Leetcode100: 70.爬楼梯、118.杨辉三角、198.打家劫舍
java·算法·leetcode
随意起个昵称6 小时前
状压dp-基础题目2([USACO12MAR] Cows in a Skyscraper G)
c++·算法·动态规划