问题链接:https://leetcode.com/problems/move-zeroes/

思路:

1. 直观版本,遍历,如果一个数是0,就把它后面的所有不为0的数往前挪。O(n2)

public void moveZeroes(int[] nums) {
        int c = 0;
        for(int i=0;i<nums.length;i++) {
            if(nums[i]==0) {
                for(int j=i+1,q=i;j<nums.length;j++) {
                	if(nums[j]!=0) {
                		nums[q] = nums[j];
                		q = j;
                	}
                }
                c++;
            }
        }
        for(int i=nums.length-c;i<nums.length;i++) {
            nums[i]=0;
        }
    }

2. 优化,使用一个index记录不为0的最大下标,每遇到一个不为0的数,就给index所在位赋值即可。最后再把index后面的全部置0。O(n)

public void moveZeroes(int[] nums) {
		int index = 0;
		for(int i=0;i<nums.length;i++) {
			if(nums[i]!=0) {
				nums[index++] = nums[i]; 
			}
		}
		for(int i=index;i<nums.length;i++) {
			nums[i] = 0;
		}
    }