Problem: 283. 移动零
思路
遍历数组,遇见零,将所有后面的数据往前移动一位,并将0加到末尾。
由于在移动过程中当前位置数据变化,采用for循环会遗漏连续为0时的情况。
循环此数通过mark记录0出现的次数控制。
双层循环,不增加新的存储空间。
易错点:
1、使用for循环时,数组中出现连续两个为0的情况时,会漏移动后一个0,因为for取值时会递增,但是通过上一次移动0后,之前后一个元素到了当前位置,下次判断时下标移动,漏掉了当前位置为0的元素
2、使用while循环时,如何跳出循环需要借助移动了多少次0辅助判断。
Code
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
i = 0
mark = 0
while i < n - mark:
if nums[i] == 0:
mark += 1
for j in range(i+1,n-mark+1):
nums[j-1] = nums[j]
nums[n-mark] = 0
i -=1
i +=1
return nums