283 移动零-简单
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
算法:
维护好非零元素应该使用的索引,遍历数组,将非零元素放在其索引。
// date 2023/11/21
func moveZeroes(nums []int) {
idx := 0
i, n := 0, len(nums)
for i < n {
if nums[i] != 0 {
// 有可能整个数组全是非零元素,所以要判断
// 因为只要有零存在,idx 比小于 i
if idx < i {
nums[idx] = nums[i]
nums[i] = 0
}
idx++
}
i++
}
}
推荐下面的写法,简洁粗暴。
先直接复制非零元素,然后尾部全部置零。
func moveZeroes(nums []int) {
idx := 0
i, n := 0, len(nums)
for i < n {
if nums[i] != 0 {
nums[idx] = nums[i]
idx++
}
i++
}
for idx < n {
nums[idx] = 0
idx++
}
}
最后更新于