给定一个数组,将不为0的数字移动到数组左端,0移动到数组右端。
public void moveZeroes(int[] nums) {
// i 用来记录不为0的位置
int i = 0;
for(int j=0; j<nums.length; j++){
if(nums[j] != 0){
nums[i++] = nums[j];
}
}
// 此时i指在最后一个不为0的数字之后第一个位置
for(; i<nums.length; i++){
nums[i] = 0;
}
}
上面的方法可以继续优化,一次循环就可以结束
public void moveZeroes(int[] nums) {
int i = 0;
for(int j=0; j<nums.length; j++){
if(nums[j] != 0){
nums[i] = nums[j];
if(j != i){
nums[j] = 0;
}
i++;
}
}
}