📌  相关文章
📜  使用两点将所有零移动到数组末尾(1)

📅  最后修改于: 2023-12-03 14:49:52.398000             🧑  作者: Mango

使用两点将所有零移动到数组末尾

在开发中经常会遇到需要操作数组的情况,其中一种场景就是需要将数组中的零移动到末尾,并且不改变其他元素的顺序。这个问题可以用“双指针”算法来解决,下面就来介绍一下如何使用双指针算法来实现将零移动到数组末尾。

问题描述

给定一个整数数组 nums,将所有0移动到它的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
解决方案

算法思路

使用一个指针 i 来遍历整个数组。每次遇到不是零的元素就将其赋值给指针 j 所指向的位置,并将 j 后移一位。最后将 j 后面的位置都赋值为 0 即可。

代码实现

def moveZeroes(nums: List[int]) -> None:
    n = len(nums)
    j = 0
    for i in range(n):
        if nums[i] != 0:
            nums[j] = nums[i]
            j += 1
    for i in range(j, n):
        nums[i] = 0

测试

nums = [0, 1, 0, 3, 12]
moveZeroes(nums)
print(nums)   # [1, 3, 12, 0, 0]
时间复杂度

上述算法只是对数组进行了一次遍历,因此时间复杂度为 $O(n)$。

总结

使用双指针算法将数组中的零移动到末尾,可以保证非零元素的相对顺序。虽然这个问题看似简单,但是其实背后蕴含了很深刻的算法思想,值得我们好好学习和掌握。