题目
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组.
尽量减少操作次数.
思路
- 最初想法:
- 遍历数组, 维护首尾两指针, 若当前元素为0, 则与尾指针指向的元素互换位置
- 每次循环, 头指针加一, 尾指针指向元素若不为0则一直减一
- 当头指针+1=尾指针, 循环结束.
但是这样得到的数组并不能保证原来顺序.
- 实现:
- 遍历两次, 第一次获取到不为0的元素并按照顺序放到数组
- 第二次将剩余置空
代码实现
1 | public static void moveZeroes(int[] nums) { |