移动0
移动0
题目
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
思路
- 使用快慢指针,快指针指向遍历的新元素,慢指针指向已经处理好的(没有0)的下一位
- 当快指针指的元素不为0时,就去比较与慢指针指向的是不是一个元素,
- 如果是一个元素,就不需要更改,快慢指针同时向前一步
- 如果不是一个元素,就要进行处理了,将快指针指向的元素赋值到慢指针指向的位置,同时将快指针指向的位置赋0(这样遍历一遍后就不需要再处理了),然后将慢指针和快指针都向前一步
- 如果快指针指向的元素为0,那么就遍历下一个元素,快指针加一即可
代码
public void moveZeroes(int[] nums) {
int i = 0, j =0;
while (j < nums.length) {
if (nums[j] != 0) {
if (i < j) {
nums[i] = nums[j];
nums[j] = 0;
}
i++;
}
j++;
}
}