📌  相关文章
📜  将所有零移动到数组末尾 | Set-2(使用单次遍历)(1)

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

将所有零移动到数组末尾 | Set-2(使用单次遍历)

在数组操作中,经常需要将特定元素移动到数组的末尾。本文将介绍一个使用单次遍历的方法,将数组中的所有零移动到其末尾。

算法思路

算法思路很简单:我们遍历数组,并在迭代过程中将非零元素移动到数组的前面。最后我们在离开循环时,将余下的空间填充为零。下面是具体实现的步骤:

  1. 定义一个指针 pos,用于记录下一个非零元素在数组中应该存放的位置。

  2. 遍历数组,如果当前元素为非零元素,就将其存储在 pos 指向的位置,并将 pos 向后移动一位。

  3. 在遍历结束后,将 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)$。