📅  最后修改于: 2023-12-03 15:41:09.565000             🧑  作者: Mango
给定一个数组 nums,编写一个函数将所有 0 移动到其末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12] 输出:[1,3,12,0,0]
我们可以使用双指针法来解决这个问题。让其中一个指针遍历整个数组,另一个指针记录下当前已经遍历过的非零元素的个数,然后将当前遍历到的非零元素放到记录指针的位置上,并将记录指针向前移动一位。
def moveZeroes(nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
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
该算法只对数组进行一次遍历,因此时间复杂度为O(n)。
该算法只使用了两个指针和一个常量空间,因此空间复杂度为O(1)。
本题考察了数组的基础操作和双指针法,需要程序员能够灵活运用。