【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
};
相关推荐
鹿角片ljp2 小时前
LeetCode 148:排序链表|归并排序、快慢指针找左中点与链表断开
算法
LabVIEW开发2 小时前
LabVIEW字符串特殊字符检测兼容
算法·labview·labview知识·labview功能·labview程序
晴天的雨.9922 小时前
[C++算法]快乐数
数据结构·c++·算法
孤狼warrior2 小时前
SCTR 五次失败的安全 BN 路由器
人工智能·python·深度学习·算法·安全·yolo
影视飓风TIM2 小时前
C++11 核心新特性完整梳理
数据结构·c++·算法
晴天的雨.9922 小时前
[C++]算法双指针 复写0
数据结构·c++·算法
橘子汽水1683 小时前
Leetcode 128,49最长连续序列,字母异位词分组
java·算法·leetcode
mmmmath_33 小时前
LeetCode.438.找到字符串中所有字母异位词
数据结构·算法·leetcode
Nil2083 小时前
leetcode 22括号生成
算法·leetcode·深度优先