search

Home  >  Q&A  >  body text

javascript - LeetCode Merge Sorted Array问题

题目

代码

/**
 * @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 i;
    if(m===0){
        for(i=0;i<n;i++){
            nums1[i]=nums2[i];   
        }
    }else{
        nums1.splice(m,nums1.length);
        nums2.splice(n,nums2.length);
        nums1=nums1.concat(nums2);
        nums1.sort();
    }
    console.log(nums1);//输出[1,2]
};
merge([1,0],1,[2],1);

问题

Input:
[1,0], 1, [2], 1

Output:
[1]           

Expected:
[1,2]

解决

var merge = function(nums1, m, nums2, n) {
    var i,j;
    var sortNumber = function(a,b){
        return a-b;
    }
    if(m===0){
        for(i=0;i<n;i++){
            nums1[i]=nums2[i];   
        }
    }else{
        nums1.splice(m,nums1.length);
        nums2.splice(n,nums2.length);
        for(j=0;j<nums2.length;j++){
            nums1.push(nums2[j]);
        }
        nums1.sort(sortNumber);
    }
};
ringa_leeringa_lee2897 days ago343

reply all(2)I'll reply

  • PHPz

    PHPz2017-04-10 15:16:17

    很久没写js了, 但我记得, 对形参的赋值 不会影响到实参的.

    nums1=nums1.concat(nums2);

    你这里改的num1, 只在函数中有效.

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:16:17

    你审题错误,m和n分别表示的是取数组的前多少个,就是说去nums1的前m个和nums2的前n个合并到nums1里并排好序

    另外你的代码在我本地输出[1],这是我的答案:

    /**
     * @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) {
        for(var i = m; i < m + n; i++) {
            nums1[i] = nums2[i - m];
        }
    
        nums1.splice(m + n);
    
        var l = nums1.length, temp;
        while(l --) {
            for(var j = 0; j < l; j++) {
                if(nums1[j] > nums1[j + 1]) {
                    temp = nums1[j];
                    nums1[j] = nums1[j + 1];
                    nums1[j + 1] = temp;
                }
            }
        }
    };
    

    reply
    0
  • Cancelreply