给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
难度:🌟
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
使用快慢指针可以完成这道题。
如果 fast 指针指向非0元素,则将该元素和 slow 指针元素交换,slow继续前进一位。直到 fast 指针遍历完整个数组,则0元素被置换到了数组的末尾。
func moveZeroes(nums []int) {
slow, fast := 0, 0
for fast < len(nums) {
if nums[fast] != 0 {
t := nums[slow]
nums[slow] = nums[fast]
nums[fast] = t
slow++
}
fast++
}
// fmt.Println(nums)
}