我已经尝试合并这两个数组,但我得到的输出是 [0, 3, 3, 4, 4 ]
function mergeSortedArrays(arr1, arr2) {
var i = 0;
var j = 0;
var arr3 = [];
if (arr1 === undefined || arr1.length == 0) {
return arr2;
}
if (arr2 === undefined || arr2.length == 0) {
return arr1;
}
while (i < arr1.length - 1 && j < arr2.length - 1) {
if (arr1[i] < arr2[j]) {
arr3.push(arr1[i]);
i++;
} else {
arr3.push(arr2[j]);
j++;
}
}
return arr3;
}
console.log(mergeSortedArrays([0, 3, 4, 31], [3, 4, 6, 30]));
对于这个例子,我知道我没有考虑数组大小不同的情况,但那是为了以后的问题。该代码目前甚至不适用于基本情况。它不会一直迭代并在中途中断。有人可以解决这个问题吗?我已经解决了 while 循环,但代码仍然无法正常工作。
最佳答案
你犯了两个错误。
- 在
while
循环条件检查数组的length
不是length - 1
。这不会添加两个数组的最后一个元素。 - 当数组之一由于
&&
而完全循环时,您的 while 循环将结束。所以在 while 添加其他数组的剩余元素之后。
function mergeSortedArrays(arr1, arr2) {
var i = 0;
var j = 0;
var arr3 = [];
if (arr1 === undefined || arr1.length == 0) {
return arr2;
}
if (arr2 === undefined || arr2.length == 0) {
return arr1;
}
while (i < arr1.length && j < arr2.length) {
if (arr1[i] < arr2[j]) {
arr3.push(arr1[i]);
i++;
} else {
arr3.push(arr2[j]);
j++;
}
}
if(i === arr1.length){
return arr3.concat(arr2.slice(j))
}
else if(j === arr2.length){
return arr3.concat(arr1.slice(i))
}
}
console.log(mergeSortedArrays([0, 3, 4, 31], [3, 4, 6, 30]));
关于Javascript,合并两个排序数组 : Can someone please tell me why this isn't giving the correct mergeSort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58006436/