简单的双指针--移动零问题

题目要求:给定一个数组 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,右指针继续遍历。

posted @ 2025-05-30 22:22  爆爆啥龙马  阅读(6)  评论(0)    收藏  举报