【LeetCode HOT100】283. 移动零

加载中... 浏览

题目

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

请注意,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

提示

一句话思路:用双指针,一个指针 start0 标记下一个非零元素该放的位置,遇到非零就交换过去

  • start0 始终指向「第一个 0」的位置(即下一个非零元素应落位的位置)。
  • 遍历数组,遇到非零元素就和 start0 位置交换,然后 start0 前进一位。
  • 交换后所有非零元素相对顺序不变,0 全部被"挤"到末尾,原地操作 O(1) 额外空间。

答案

python
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        start0 = 0                  # 指针:下一个非零元素应该放到的位置
        for i in range(len(nums)):  # 遍历整个数组
            if nums[i]:             # 当前元素是非零
                nums[i], nums[start0] = nums[start0], nums[i]  # 与前面位置交换,把 0 换到后面
                start0 += 1         # 非零元素落位完成,指针后移

留言板

加载评论中...
【LeetCode HOT100】128. 最长连续序列
【LeetCode HOT100】49. 字母异位词分组
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1