【快慢指针】移动数组的零

263 阅读1分钟

leetcode原题:移动零

示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

图解思路: 当快指针指向的数字不为0的时候,把该数值赋值给慢指针指向的下标,然后慢指针+1。
当快指针走完的时候,慢指针指向的下标开始,直到列表末尾,全部赋值0。

 sf
 || 
[0, 1, 0, 3, 12]
    sf
    ||
[1, 1, 0, 3, 12] 
    s  f
    |  |
[1, 1, 0, 3, 12] 
       s  f
       |  |
[1, 3, 0, 3, 12]
           s   f
           |   |
[1, 3, 12, 3, 12]

[1, 3, 12, 0, 0]

python代码:

def moveZeroes(self, nums: List[int]) -> None:
    """
    Do not return anything, modify nums in-place instead.
    """
    k = 0
    l = len(nums)
    for i in range(l):
        if nums[i] != 0:
            nums[k] = nums[i]
            k += 1
    while k < l:
        nums[k] = 0
        k += 1