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