题目
给定一个数组 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 # 非零元素落位完成,指针后移
留言板