力扣 283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
方案一:通过过滤器将所有非零元素顺序前置。
func moveZeroes(nums []int) {
// 定义一个指针指向 nums 开头
n := 0
// 遍历所有元素
for i := 0; i < len(nums); i++ {
// filter 过滤非零元素
if nums[i] != 0 {
// 将非零元素的值赋值给指针 n,并将其往后移动一位
nums[n] = nums[i]
n++
}
}
// 将剩余元素置零
// n 前进的过程中已经将所有非零元素都记录下来
for ; n < len(nums); n++ {
nums[n] = 0
}
}
- 时间复杂度:O(n),因为需要遍历所有数组元素,所以时间复杂度为 O(n)。
- 空间复杂度:O(1),因为没有借助额外的辅助空间,只是在原数组的基础上进行遍历移动,所以空间复杂度为 O(1)。