定义一个函数,将数组种所有的 `0` 都移动到末尾
例如输入 `[1, 0, 3, 0, 11, 0]` 输出 `[1, 3, 11, 0, 0, 0]`。要求:
- 只移动 `0` ,其他数字顺序不变
- 考虑时间复杂度
- 必须在原数组就行操作
如果不限制“必须在原数组修改”
- 定义 `part1` `part2` 两个空数组
- 遍历数组,非 `0` push 到 `part1` ,`0` push 到 `part2`
- 返回 `part1.concat(part2)`
时间复杂度 `O(n)` 空间复杂度 `O(n)` ,
传统方式
思路
扫描二维码关注公众号,回复:
14222441 查看本文章

- 遍历数组
- 遇到 `0` 则 push 到数组末尾
- 然后用 splice 截取掉当前元素
/**
* 移动 0 到数组的末尾(嵌套循环)
* @param arr number arr
*/
export function moveZero1(arr: number[]): void {
const length = arr.length
if (length === 0) return
let zeroLength = 0
// O(n^2)
for (let i = 0; i < length - zeroLength; i++) {
if (arr[i] ==&