📌  相关文章
📜  将所有零移动到数组末尾的Javascript程序(1)

📅  最后修改于: 2023-12-03 15:09:36.430000             🧑  作者: Mango

将所有零移动到数组末尾的 Javascript 程序

本文将会介绍如何将所有零元素移动到数组末尾,我们将提供两种不同的解决方案。首先,我们将了解问题的具体情况,然后将分别介绍两种解决方案。

问题描述

给定一个数组,我们希望将所有的零元素移动到数组的末尾。例如,对于数组 [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);
}

上述代码将会先创建两个空数组 nonZeroArrayzeroArray,然后在迭代原始数组时将所有零元素添加到 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 需要加一,因为我们已经处理了一个非零元素。最后返回修改后的数组。

总结

至此,我们已经介绍了两种不同的解决方案,使我们能够将所有的零移动到数组末尾。但是对于大型数组,第二种解决方案可能会比第一种更加高效,因此我们应该选用最适合自己应用场景的解决方案。