NOTE

移动零

将数组中的零移动到末尾并保持非零元素的相对顺序。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

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

2. 思路

  1. 思路一
    • 选择排序
    • 从左往右找到为0的元素,从后面找到不为0的元素,交换两者
  2. 思路二
    • 同向移动的双指针。把非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
	}

}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看