88. 合并两个有序数组 JavaScript实现

88. 合并两个有序数组

1、直接合并后排序

将nms2放到nums1的后面,然后进行排序

var merge = function(nums1, m, nums2, n) {
    // 将splice将nums2的值放到nums1的后面
    // 从m位置开始删除n个(nums2的长度)元素,然后将nums2添加到最后
    nums1.splice(m,n,...nums2);
    // 将nums1进行排序,修改的是原来的数组,所以不需要返回
    nums1.sort((a,b)=>(a-b));
};

2、逆向双指针

逆向双指针图解

var merge = function(nums1, m, nums2, n) {
    // 设置三个指针,分别指向nums1和nums2的数字部分的尾部 + nums1数组的尾部
    var i = m-1,
        j = n-1,
        k = m+n-1;
    
    // 必须把所有的条件判断都写到一起,这样满足一个条件就会结束本次循环。不会继续往下执行。
        
    // 其中一个数组不为空,就可以进行下面的循环
    while(i >= 0 || j >= 0){ 
        if(i<0){
            // nums1为空的情况,将nums2的所有值放到nums1中
            nums1[k--] = nums2[j--];
        }
        else if(j<0){
            // nums2为空的情况,将nums1的所有值放到nums1中
            nums1[k--] = nums1[i--];
        }
        // 两者均不空的时候
        // 如果数组2中的数字大,就放到数组1的末尾.并且元素需要移动,所以需要自减操作
        else if(nums1[i] < nums2[j]){
            nums1[k--] = nums2[j--];
        }
        else{
            // 数组1中的数字大,就移动数组1中的数字到数组1的末尾
            nums1[k--] = nums1[i--];   
        }        
    }
    return nums1;
};

3、js语法

(… )的用法:它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开
… 的用法

你可能感兴趣的:(leetcode刷题,#,数组,leetcode,排序算法,算法)