283. 移动零
给定一个数组 nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
- 1 <= nums.length <= 10^4
- -2^31 <= nums[i] <= 2^31 - 1
进阶:你能尽量减少完成的操作次数吗?
Go代码
func moveZeroes(nums []int) {
// 因为要求原地操作,又要将0移到末尾
// 实际所有非0数移动到前面之后,后续的索引位置都赋值为0就相当于将0移到了末尾
if len(nums) == 0 {
return
}
slow ,fast := 0,0
for i := fast ;i < len(nums);i++ {
// i(fast)不断后移寻找不为0的元素
if nums[i] == 0 {
continue //i进入下轮循环i++,实际上,i充当的就是快指针
}
// slow用于指着下一个放不为0元素的位置
nums[slow] = nums[i]
slow++
}
// 后续的位置置为0
for i:= slow;i < len(nums);i++ {
nums[i] = 0
}
return
}