题目描述

[EN | CN]

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

示例:

1
2
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

解法 1:遍历赋值

遍历一遍数组,将非零数值赋值到原数组对应索引上。

假设 xxxxxxxx 为 $n$,那么

  • 时间复杂度为 $O(n)$,xxxxxxx;
  • 空间复杂度为 $O(1)$,xxxxxxxx。

实现与结果如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        for n in nums:
            if n:
                nums[i], i = n, i + 1

        for j in range(i, len(nums)):
            nums[j] = 0
  • 执行用时:44 ms,在所有 Python3 提交中击败了 73.74% 的用户。
  • 内存消耗:14.3 MB,在所有 Python3 提交中击败了 7.41% 的用户。