📅  最后修改于: 2023-12-03 15:09:36.426000             🧑  作者: Mango
在数组操作中,经常需要将特定元素移动到数组的末尾。本文将介绍一个使用单次遍历的方法,将数组中的所有零移动到其末尾。
算法思路很简单:我们遍历数组,并在迭代过程中将非零元素移动到数组的前面。最后我们在离开循环时,将余下的空间填充为零。下面是具体实现的步骤:
定义一个指针 pos
,用于记录下一个非零元素在数组中应该存放的位置。
遍历数组,如果当前元素为非零元素,就将其存储在 pos
指向的位置,并将 pos
向后移动一位。
在遍历结束后,将 pos
后续元素的值全部赋为零即可。
def move_zeros(nums):
pos = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[pos] = nums[i]
pos += 1
while pos < len(nums):
nums[pos] = 0
pos += 1
以上便是使用单次遍历将所有零移动到数组末尾的算法实现。
预计的测试数据及其结果如下所示:
# 测试用例
nums = [0, 1, 0, 3, 12]
# 函数调用
move_zeros(nums)
# 验证结果
assert(nums == [1, 3, 12, 0, 0])
测试通过。
本文介绍了一个使用单次遍历将所有零移动到数组末尾的算法实现。本算法的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。