NOTE
移动零
将数组中的零移动到末尾并保持非零元素的相对顺序。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
2. 思路
- 思路一
- 选择排序
- 从左往右找到为0的元素,从后面找到不为0的元素,交换两者
- 思路二
- 同向移动的双指针。把非0的全部移动到前面,剩下的置为0
3. 实现
3.1. 选择排序
func moveZeroes(nums []int) {
for i := 0; i < len(nums); i++ {
if nums[i] != 0 {
continue
}
for j := i + 1; j < len(nums); j++ {
if nums[j] != 0 {
swap(nums, i, j)
break
}
}
}
}
3.2. 双指针
//时间:O(N)
//空间:O(1)
func moveZeroes2(nums []int) {
if len(nums) == 0 {
return
}
//把非零的全部搬运到前面
j := 0
for i := 0; i < len(nums); i++ {
if nums[i] != 0 {
nums[j] = nums[i]
j++
}
}
//剩下的全部赋值为0即可
for i := j; i < len(nums); i++ {
nums[i] = 0
}
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看