1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class moveZeroes {
    public static void moveZeroes(int[] nums){
//快慢指针的思想和removeElement这一题有着异曲同工之妙
        int i=0,j=0;//i是慢指针 指向第一个0,j是快指针 指向第一个非0
        for(;;i++){
            if(nums[i]==0)break;//虽然我也觉得这里的循环写得很奇怪,但是思想还是很清晰的:第一个找到0!!如果出界就退出
            if(i+1==nums.length) return;
        }

        j=i+1;//j是从i右边开始起步的
        for (;;j++){
            if(j>=nums.length) return;
            if(nums[j]!=0)break;

        }
       // System.out.println(i+"j"+j+"----------");
        for(;j<nums.length;j++){
            if(nums[j]!=0){
                if(nums[j]!=0){
                    nums[i]=nums[j];
                    nums[j]=0;
                    i++;
                }
            }

        }
    }
    public static void main(String[] args) {
        int []nums={0,0};
        moveZeroes(nums);
        for(int i=0;i<nums.length;i++){
            System.out.println(nums[i]);
        }

    }
}