参考代码:
public void moveZeroes(int[] nums) {
if (nums == null || nums.length <= 1) {
return;
}
int index = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[index] = nums[i];
index++;
}
}
for (int i = index; i < nums.length; i++) {
nums[i] = 0;
}
}
大致思路:把非零的单独找到放在前面,后面的令之全为0。创建一个index,令之为0,将非零的数移到第index的位置,并inde++,等找到下一个非零的数在放到原index的下一个位置,因为index一开始为0,所以只要出现非零的数都是按原来的相对顺序排列在数组的最前方,所以剩下的数都为0,因此从最后的index的位置开始后面都是0。
具体实现:
首先排除特殊的情况,然后创建index令其为0;
先进行第一次遍历,当nums[i] != 0时,就将非零的数移到第index的位置,即nums[index] = nums[i];,并index++,以便下一个非0的数移到下一个位置,循环到底,直至所有非零的数都是按原来的相对顺序排列在数组的最前方;
然后进行第二次从index开始的遍历,让index的位置开始后面都是0。因为在上面的循环中最后一次index++l,所以应该从index开始。