为什么合并排序数组时,0 没有被拼接出来?

问题描述 投票:0回答:1

我正在应对这个挑战:

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]

你能告诉我为什么吗?

谢谢!

javascript typescript array-merge
1个回答
0
投票

您正在循环数组并使用原始数组的索引,但数组本身正在被更改。

因此,如果您从

[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来代替并创建一个新数组,同时保留原始数组以进行索引。

© www.soinside.com 2019 - 2024. All rights reserved.