不断向右移动 right 指针,每次移动到非零数,则将左右指针对应的数交换,交换同时将 left 右移。
此时,left 指针左边均为处理好的非零数,而从 left 指针指向的位置开始, right 指针左边都为 0。
遍历结束之后,则所有 0 都移动到了右侧,且保持了非零数的相对位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
class Solution: def moveZeroes(self, nums): left = 0 right = 0 while right < len(nums): # 不断向右移动 right 指针 if nums[right] != 0: # 每次移动到非零数,则将左右指针对应的数交换, nums[left], nums[right] = nums[right], nums[left] # 交换同时将 left 右移 left += 1 # 不断向右移动 right 指针 right += 1 print(nums) if __name__ == "__main__": st = Solution().moveZeroes([1,1,0,1,0,1])