将所有零移到数组末尾

17 Mar 2025 | 4 分钟阅读

数组用于在一个变量中存储各种值,而不是为每个值声明单独的变量。

我们可以对给定的数组执行许多操作。但是,目前我们将重点关注需要将数组中的所有零移到末尾的问题。

问题陈述

在给定的数组中,我们的任务是将给定数组的所有零推到数组的末尾。

解决方案

我们有许多方法可以执行此任务。一些方法是

解决方案-1

使用 For 循环


Move all Zeroes to End of Array

说明

  1. 该代码导入了关键库,包括 java.util 包中的 ArrayList 和 Groups。定义了一个名为 MoveZero 的类。
  2. 使用 Arrays.asList 中的数据,创建并初始化了一个数组 ArrayList。在此数组上调用了 moveZeroes 方法。
  3. 已打印修改后的数组。
  4. 定义了 moveZeroes 过程,用于将所有零移到列表的最远末尾。
  5. 它从列表的末尾到开头进行遍历。
  6. 如果当前元素是零,则使用 remove(i) 从其原始位置删除它。
  7. 使用 add(0) 在列表的末尾添加一个零。
  8. 修改后的列表已在主方法中打印。

时间复杂度:O(n)

空间复杂度:O(1)

解决方案-2

使用 While 循环


Move all Zeroes to End of Array

说明

  1. 初始化指针:两个指针 left (l) 和 right (r) 都初始化在数组的开头和末尾,如下所示。
  2. 循环条件:while 循环一直运行,直到索引 l 小于索引 r。
  3. 检查和交换:循环有一个内置的条件检查,用于验证 arr[l] 是否是左索引的元素,以及 arr[r] 是否是右索引的元素。否则,它会更新其组件。
  4. 移动指针:在交换结束时,或者当不满足要求时,它会进行调整。如果左索引的元素不是零,则 l 会递增。如果右索引的元素是零,则 r 会递减。
  5. 循环继续:当左指针超过右指针时,过程停止。
  6. 显示结果:最后一步,修改了原始数组并显示了新数组。

时间复杂度:O(n)

空间复杂度:O(1)

解决方案-3

使用 ArrayList 动态管理数组元素。

说明

  1. 代码首先获取核心库以在 Java 中执行一些基本任务。
  2. 它指定了一个名为 MoveZero 的类。
  3. 在 head 或主方法中,展示了使用该类的一个实例。
  4. 创建了一个名为 arrays 的 ArrayList,并用 Arrays.asList 中提供的值进行初始化。
  5. 然后调用 moveZero 方法处理此数组。
  6. 修改后的数组已打印。
  7. 定义了 moveZeroToEnd 方法,用于修改 ArrayList 中的元素,将所有零移到列表的末尾。
  8. 它将输入列表中的元素分为两个不同的列表:zeros 和 nonzeroes。
  9. 通过连接 nonzeroes 和 zeros 列表来获得最终结果。
  10. 然后从方法中返回修改后的列表。

时间复杂度:O(n)

空间复杂度:O(n)

输出

Move all Zeroes to End of Array

结论

总的来说,每种解决方案都提供了解决问题的不同方法,在时间和空间复杂度上有所不同。方案的选择取决于特定需求和给定情况下的限制。