题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。约束:时间复杂度为 O(n), n 为数组长度,空间复杂度为 O(1) 即常量级。本篇经验将分享如何通过双指针算法在约束条件下求解。
工具/原料
1
Eclipse
2
JDK1.8
方法/步骤
1
算法原理:声明快慢两个数组索引指针,同时向前移动,如果当前元素等于 0 ,则慢索引停止(指向第一个为 0 的元素),快索引不停,如果当前元素不等于 0, 则和慢索引元素交换,慢索引向前移动1位即可。
2
编写测试代码。
3
运行测试代码,观察控制台输出,符合预期,本地测试通过。
4
平台提交算法,测试通过。
5
算法复杂度总结:该算法只需遍历两遍数组,因此时间复杂度为 O(n),n 为数组长度,没有借助其余数据结构进行辅助操作,空间复杂度为 O(1)。
注意事项
算法需要保持数组非0元素的原始相对顺序不变
下一篇:如何实现一个有序Set集合