我正在应对这个挑战:
https://leetcode.com/problems/merge-sorted-array/
这是我的代码:
/**
Do not return anything, modify nums1 in-place instead.
*/
function merge(nums1, m, nums2, n) {
nums2.forEach(i => {
if (i > 0) {
nums1.push(i)
}
})
nums1.sort()
for (let i = 0; i < nums1.length; i++) {
if (nums1[i] == 0) {
nums1.splice(i, 1)
}
}
};
这是输入
([1,2,3,0,0,0], 3, [2,5,6], 3)
我的输出是:
[0,1,2,2,3,5,6]
代替:
[1,2,2,3,5,6]
你能告诉我为什么吗?
谢谢!
您正在循环数组并使用原始数组的索引,但数组本身正在被更改。
因此,如果您从
[0,0,0,1,2,2,3,5,6]
开始,并在索引 0 处删除 [0,0,1,2,2,3,5,6]
。
然后 i=1,检查并删除索引 1 [0,(here=>)0,1,2,2,3,5,6]
,最终得到 [0,1,2,2,3,5,6]
。进一步的索引显示没有零。
我建议您使用reduce或map来代替并创建一个新数组,同时保留原始数组以进行索引。