• LeetCode 88. 合并两个有序数组(JavaScript 简单)


    1. 题目:

    给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序排列。
    注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

    示例 1:
    输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
    输出:[1,2,2,3,5,6]
    解释:需要合并 [1,2,3] 和 [2,5,6] 。
    合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

    示例 2:
    输入:nums1 = [1], m = 1, nums2 = [], n = 0
    输出:[1]
    解释:需要合并 [1] 和 [] 。
    合并结果是 [1] 。

    示例 3:
    输入:nums1 = [0], m = 0, nums2 = [1], n = 1
    输出:[1]
    解释:需要合并的数组是 [] 和 [1] 。
    合并结果是 [1] 。
    注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

    提示:
    nums1.length == m + n
    nums2.length == n
    0 <= m, n <= 200
    1 <= m + n <= 200
    -109 <= nums1[i], nums2[j] <= 109

    2. 思路和代码

    2.1 原思路和代码

    两个数组合并,最终结果保持有序。两个数组分别各设一个指针,每次令对相应位置的元素作比较,小的先放入,放入后指针向后移动一位,直到某个数组的指针到达末尾。此时将另外一个数组的剩余值加入到最终返回的数组中。

    /**
     1. @param {number[]} nums1
     2. @param {number} m
     3. @param {number[]} nums2
     4. @param {number} n
     5. @return {void} Do not return anything, modify nums1 in-place instead.
     */
    var merge = function(nums1, m, nums2, n) {
        var nums1_copy = new Array(m)
        for(var i = 0; i<m; i++){
            nums1_copy[i] = nums1[i];
        }
        var index1 = 0;
        var index2 = 0;
        var i = 0
        // 可能会先遍历完某个数组,剩余的部分直接放到后头
        for( ;index1<m && index2<n; i++){
            if(nums1_copy[index1] < nums2[index2]){
                nums1[i] = nums1_copy[index1];
                index1++;
            }
            else if(nums1_copy[index1] > nums2[index2]){
                nums1[i] = nums2[index2];
                index2++;
            }
            else{ // 此时两个数组对应位置元素相等
                nums1[i] = nums2[index2];
                i++;
                nums1[i] = nums1_copy[index1];
                index1++;
                index2++;
            }
        }
        // 此时我们要知道 1 or 2 有剩余元素没有进到最终数组中
        for( ; index1<m; i++){
            nums1[i] = nums1_copy[index1];
            index1++;
        }
    
        for( ; index2<n; i++){
            nums1[i] = nums2[index2];
            index2++;
        }
        
        return nums1
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    2.2 反思和升级代码

    ① 一次循环,尽可能解决更多问题
    ② 条件进行的优先次序非常重要

    /**
     * @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) {
        var nums1_copy = new Array(m)
        for(var i = 0; i<m; i++){
            nums1_copy[i] = nums1[i];
        }
        
        let index1=0, index2=0;
        while(index1<m || index2<n){
            if(index1==m) nums1[index1+index2] = nums2[index2++];
            else if(index2==n) nums1[index1+index2] = nums1_copy[index1++];
            else if(nums1_copy[index1] < nums2[index2]) nums1[index1+index2] = nums1_copy[index1++];
            else nums1[index1+index2] = nums2[index2++];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    3. 总结知识点

    1. JavaScript不存在数组越界的情况,没有定义的值默认为 undefined
    2. 判断一个值是否是 undefined,使用 typeof xx == undefined
  • 相关阅读:
    Chatgpt版本的opencv安装教程
    obs 时间显示插件
    基于Matlab搭建单站雷达扫描天空仿真平台(附源码)
    使用mybatis标签规避空where
    文件上传与安全狗
    分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)
    在以「基础设施」为定位的发展阶段里,产业变成了一个可以有诸多创新的存在
    C++智能指针,强制类型转换
    Python二级 每周练习题23
    机器学习之KNN算法
  • 原文地址:https://blog.csdn.net/m0_37632283/article/details/132865289