类型:数组
-
- 移动零 💚
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)