跳到主要内容

Move Zeroes

描述

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

分析

这题跟 "Remove Element" 思路一模一样,只是最后要把后半截设置为 0。

代码

# Move Zeroes
# 双指针
# Time Complexity: O(n), Space Complexity: O(1)
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
slow = 0
for fast in range(len(nums)):
if nums[fast] != 0:
nums[slow] = nums[fast]
slow += 1
for i in range(slow, len(nums)):
nums[i] = 0

上面的代码实际上重复实现了removeElement(),所以本题实际上可以直接调用removeElement(),只是最后要把后半截设置为 0。s

# Move Zeroes
# 双指针
# Time Complexity: O(n), Space Complexity: O(1)
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
slow = self.removeElement(nums, 0)
for i in range(slow, len(nums)):
nums[i] = 0

相关题目