【Web前端问题】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]

  • 但是我本地运行输出的就是[1,2]啊!
    图片描述

  • 哪里出了问题?

解决

  • 是concat()的问题,concat()又复制了一份,没有在nums1上面修改,所以我在方法中打印是对的,但是在方法外打印就不对了。
  • 当然sort()方法也有点问题,需要传一个比较函数
  • 最后AC的代码如下:

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);

}

};

回答:

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

nums1=nums1.concat(nums2);

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

回答:

你审题错误,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;

}

}

}

};

以上是 【Web前端问题】LeetCode Merge Sorted Array问题 的全部内容, 来源链接: utcz.com/a/139986.html

回到顶部