天机阁

283. 移动零

2022-07-01 · 1 min read
LeetCode

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

难度:🌟

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]
 
提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

题解

使用快慢指针可以完成这道题。
如果 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)
}