📅  最后修改于: 2023-12-03 15:09:36.430000             🧑  作者: Mango
本文将会介绍如何将所有零元素移动到数组末尾,我们将提供两种不同的解决方案。首先,我们将了解问题的具体情况,然后将分别介绍两种解决方案。
给定一个数组,我们希望将所有的零元素移动到数组的末尾。例如,对于数组 [0, 1, 0, 3, 12]
,我们期望的结果为 [1, 3, 12, 0, 0]
。
第一种解决方案是创建一个新数组,然后迭代原始数组,将所有零元素添加到新数组的末尾,最后将剩余的非零元素添加到新数组的末尾。
function moveZeros(array) {
var nonZeroArray = [];
var zeroArray = [];
for (var i = 0; i < array.length; i++) {
if (array[i] === 0) {
zeroArray.push(array[i]);
} else {
nonZeroArray.push(array[i]);
}
}
return nonZeroArray.concat(zeroArray);
}
上述代码将会先创建两个空数组 nonZeroArray
和 zeroArray
,然后在迭代原始数组时将所有零元素添加到 zeroArray
,将非零元素添加到 nonZeroArray
,最后将它们拼接在一起返回。
第二种解决方案是获取非零元素的起始索引位置,然后迭代数组,将每个非零元素与这个索引位置上的元素交换,依此类推。
function swap(array, i, j) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
function moveZeros(array) {
var nonZeroIndex = 0;
for (var i = 0; i < array.length; i++) {
if (array[i] !== 0) {
swap(array, i, nonZeroIndex);
nonZeroIndex++;
}
}
return array;
}
上述代码通过迭代数组,使用 swap
函数,将每个非零元素与 nonZeroIndex
上的元素交换。在交换元素后,nonZeroIndex
需要加一,因为我们已经处理了一个非零元素。最后返回修改后的数组。
至此,我们已经介绍了两种不同的解决方案,使我们能够将所有的零移动到数组末尾。但是对于大型数组,第二种解决方案可能会比第一种更加高效,因此我们应该选用最适合自己应用场景的解决方案。