package com.lsy.leetcodehot100;
public class _Hot4_移动零 {
public static int[] moveZeroes(int[] nums){
//判断数组是否为null
if(nums==null && nums.length==0){
return null;
}
/**
* 初始化两个指针 i 和 noZero,其中 i 用于遍历数组,noZero 用于记录非零元素的位置。初始时,i = 0 和 noZero = 0。
*
* 遍历数组:
*
* 当 i = 0 时,nums[0] 是 0,不满足 if(nums[i] != 0) 的条件,所以不做任何操作,i 自增到 1。
* 当 i = 1 时,nums[1] 是 1,满足条件,执行交换:
* 将 nums[1](即 1)与 nums[noZero](即 nums[0])交换,得到 nums = [1, 0, 0, 3, 2]。
* noZero 自增到 1。
* 继续遍历,i = 2,nums[2] 是 0,不满足条件,i 自增到 3。
* i = 3,nums[3] 是 3,满足条件,执行交换:
* 将 nums[3](即 3)与 nums[noZero](即 nums[1])交换,得到 nums = [1, 3, 0, 0, 2]。
* noZero 自增到 2。
* 最后,i = 4,nums[4] 是 2,满足条件,执行交换:
* 将 nums[4](即 2)与 nums[noZero](即 nums[2])交换,得到最终结果 nums = [1, 3, 2, 0, 0]。
* noZero 自增到 3,但此时 noZero 已经达到非零元素的最后一个位置,所以 noZero 不再自增。
* 遍历结束,数组中的非零元素已经全部移动到了数组的左侧,零元素移动到了右侧。
*/
//将结果集进行划分,左边不为0,右边全为0
//noZero就是不为0的数字下标
int noZero=0;
for(int i=0;i<nums.length;i++){
//如果不为0,那么就进行交换,将不为0的数字换到数组的左边
if(nums[i]!=0){
int temp = nums[i];
nums[i]=nums[noZero];
nums[noZero++]=temp;
}
}
return nums;
}
public static void main(String[] args) {
int[] nums = {0,1,0,3,12};
int[] moveNums = moveZeroes(nums);
for(int i=0;i<moveNums.length;i++){
System.out.print(moveNums[i]+"\t");
}
}
}