移动 0 到数组的末尾

本文讨论如何在原数组中将所有0移动到末尾,同时保持其他数字的原始顺序。首先介绍了在不修改原数组的情况下,通过创建两个新数组`part1`和`part2`分别存储非0和0元素的方法,虽然时间复杂度为`O(n)`,但空间复杂度也为`O(n)`。接着分析了传统方式,即遍历数组遇到0则移到末尾,但由于使用`splice`导致时间复杂度为`O(n^2)`。最后提出了双指针策略,通过两个指针分别指向第一个0和非0元素进行交换,实现时间复杂度`O(n)`,空间复杂度`O(1)`的解决方案。
摘要由CSDN通过智能技术生成

定义一个函数,将数组种所有的 `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)` ,

传统方式

思路

- 遍历数组

- 遇到 `0` 则 push 到数组末尾

- 然后用 splice 截取掉当前元素

/**
 * 移动 0 到数组的末尾(嵌套循环)
 * @param arr number arr
 */
export function moveZero1(arr: number[]): void {
    const lengt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值