简单的双指针--移动零问题
题目要求:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
def moveZeroes(self, nums: List[int]) -> None:
'''
思路是先设计1个指针,指向第一个元素,作用是指向下一个非零元素应该待的索引。
遍历数组,如果遇到非零,则交换。之后j += 1
这样,就算一直都是非零元素,二者交换位置元素也不会改变
'''
j = 0
for i in range(len(nums)):
if nums[i]:
nums[i],nums[j] = nums[j],nums[i]
j += 1
这题要注意的点是:
1、必须原地改变
2、保持非零元素相对顺序。
所以只能维护一个左指针,放在最左边,其含义是指向下一个非零元素应该在的地方,之后右指针遍历数组,如果遇到非零元素,则左右指针对应的元素交换位置。之后左指针加1,右指针继续遍历。

浙公网安备 33010602011771号