跳过正文
  1. leetcode 题解/

283_移动零

·53 字·1 分钟

类型:数组

    1. 移动零 💚

    https://leetcode-cn.com/problems/move-zeroes/

    ❓ 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    💡 双指针

    使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

    • 左指针左边均为非零数;
    • 左右指针之间均为零。

    右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。

    就好像是有一串零组成的泡泡在往右冒,当遇到新的零泡的时候,则会将其吸纳融合。

    因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            n = len(nums)
            left = right = 0
            while right < n:
                if nums[right] != 0:
                    nums[left], nums[right] = nums[right], nums[left]
                    left += 1
                right += 1

    时间复杂度:O(n),空间复杂度:O(1)