将数组中的0移动到末尾
题目如下
- 将数组中的0移动到末尾,如输入 [1,,0,3,0,11,0],输出 [1,3,11,0,0,0]
- 只移动0,其他顺序不变
- 必须在原数组进行操作
补充
- 向面试官确认是否必须修改原数组
- 数组是连续存储,要慎用,splice,unshift等API
- 双指针思路
思路如下
- 如果不限制必须在原数组操作
- 定义 part1 part2 两个数组
- 遍历数组,非 0 push 到 part1,0 push到part2
- 返回 part1.concat(part2)
- 有限制的情况下,遇到0push到数组末尾,用splice截取掉当前元素,此时的时间复杂度为O(n^2) 算法不可用
- 双指针
- 定义j指向第一个0,i指向j后面第一个非0
- 交换i和j的值,继续向后移动
- 只遍历一次,所以时间复杂度是O(n)
1 | /** |
单元测试
1 | /** |