给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序(必须在原数组上操作,最小化操作数)
例如:
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0]
public void moveZeroes(int[] nums) {
// Write your code here
//j用来记录0的个数
int j = 0;
int m = -1;
int k,t;
//i的循环次数是数组长度减去0的个数
for (int i = 0;i < nums.length - j;i++) {
k = i;
if (m!=-1) {
k = m;
m = -1;
}
t = k;
if (nums[k]==0) {
//当前值为0,后面的都往前移动一位
while(k < nums.length - j -1) {
nums[k] = nums[k+1];
k++;
}
//0赋值到相应位置
nums[nums.length - j -1] =0;
j++;
}
//当前元素下一个值也是0,移动仍然从当前下标开始
if(nums[t] ==0) {
m = t;
}
}
}