多语言展示
当前在线:191今日阅读:26今日分享:39

Java如何通过双指针算法将数组中的0移动到尾部

题目:给定一个数组 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元素的原始相对顺序不变

推荐信息