LeetCode 283. Move Zeroes 题解题目描述给定一个数组 nums编写一个函数将所有 0 移动到数组的末尾同时保持非零元素的相对顺序。请注意 必须在不复制数组的情况下原地对数组进行操作。示例 1输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2输入: nums [0] 输出: [0]解题思路使用双指针一个指针遍历数组另一个指针记录非零元素应该放置的位置代码实现def moveZeroes(nums): non_zero_idx 0 # 将非零元素移到前面 for i in range(len(nums)): if nums[i] ! 0: nums[non_zero_idx] nums[i] non_zero_idx 1 # 后面补零 for i in range(non_zero_idx, len(nums)): nums[i] 0优化版本def moveZeroes(nums): non_zero_idx 0 for i in range(len(nums)): if nums[i] ! 0: # 交换非零元素到前面 nums[non_zero_idx], nums[i] nums[i], nums[non_zero_idx] non_zero_idx 1复杂度分析时间复杂度O(n)空间复杂度O(1)总结本题是双指针技巧的基础应用。关键点使用双指针分别追踪遍历位置和写入位置原地修改不复制数组保持非零元素相对顺序