描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
思路
将非0移到前面 在将后面的位置设为0
利用快慢指针 slow 表示非0的右边界 fast表示当前遍历的位置
实现
func moveZeroes(nums []int) {
var slow int
var fast int
var l = len(nums)
for fast < l{
if nums[fast] != 0 { // 如果当前数字不为0 则将数移到slow指向的位置
if fast != slow{ // 题目要求尽量减少操作次数 如果当前fast = slow 就不需要移动
nums[slow] = nums[fast]
}
slow++ // 移动完成将slow右移
}
fast++
}
for slow < l{ // 当数组遍历完成后 将slow 右面的位置全部置0
nums[slow] = 0
slow++
}
return
}