/**
* @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]
nums1
上面修改,所以我在方法中打印是对的,但是在方法外打印就不对了。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);
}
};
PHPz2017-04-10 15:16:17
很久没写js了, 但我记得, 对形参的赋值 不会影响到实参的.
nums1=nums1.concat(nums2);
你这里改的num1, 只在函数中有效.
大家讲道理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;
}
}
}
};