# ❓ 周一算法题之「移动零」

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 复制代码说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。
let arr = [0, 1, 0, 3, 12]
let arr2 = [3, 0, 1, 0, 0, 7, 0, 0, 3, 12]

function moveZeroToLast(arr) {
  // 零出现个数
  let count = 0
  for (let i = 0, length = arr.length; i < length; i++) {
    if (arr[i] === 0) {
      count++
    } else if (count !== 0) {
      // 当前 索引 i - 零个数 index = 第一个零出现位置
      arr[i - count] = arr[i]
      arr[i] = 0
    }
  }
  return arr
}

console.log(moveZeroToLast(arr2))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19