题目
题解一:反向收集在这里插入代码片
反向收集不是0 的数字放到一个数组里面,用原数组大小减去收集数组的大小就是0 的个数
/**
* 反向收集不是0 的数字放到一个数组里面,用原数组大小减去收集数组的大小就是0 的个数
* @param nums
*/
public static void moveZeroes(int[] nums) {
int s = 0;//定义收集不是0的数的指针
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[s] = nums[i];
s++;
}
}
//将剩下0补充到数组末尾
while (s<nums.length){
nums[s] = 0;
s++;
}
}
题解二:快慢指针
fast指针负责扫描不是0的数,slow指针记录不是0的数放置的位置,
class Solution {
//快慢指针
public void moveZeroes(int[] nums) {
if(nums.length == 1) return ;
int fast = 0;
int slow = 0;
while(fast<nums.length){
if(nums[fast] == 0) fast++;//如果fast位置是0 直接跳过
else{//如果fast位置不是0,则交换slow和fast位置的值 再让slow和fast++
swap(fast,slow,nums);
fast++;
slow++;
}
}
return ;
}
//交换函数
public void swap(int fast,int slow,int[] nums){
int temp = nums[fast];
nums[fast] = nums[slow];
nums[slow] = temp;
}
}