class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
p = -1 # 记录第一个0的下标
for i in range(0, len(nums)):
# 如果当前元素是0,需要判断是否需要更新p的值
if nums[i] == 0:
# 如果p==-1说明当前元素是第一个0,更新p
if p == -1:
p = i
# 如果p不等于-1,说明遇到的还是0,不做任何操作
# 如果当前元素不是0,需要判断是否需要互换
else:
# 如果p不是-1说明数组中有0,那么此时把nums[i]和nums[p]互换
if p != -1:
tmp = nums[i]
nums[i] = nums[p]
nums[p] = tmp
p += 1
# 否则p==-1说明数组中还没有遇到0,那么此时不做任何操作
return nums
有点类似于快排用到的互换思想
重写优化上述的代码
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
# Solution 2: 重写代码
if not nums:
return 0
# 两个指针i和j
j = 0
for i in range(len(nums)):
# 当前元素!=0,就把其交换到左边,等于0的交换到右边
if nums[i]:
nums[j],nums[i] = nums[i],nums[j]
j += 1
return nums