题目描述:
思路一:
边找0边移动,可以从前往后找,也可以从后往前找,个人感觉从后往前找比较方便,省去了移动之后再次判断原来位置是否为0,这样做效率会比较低一点,代码如下:
public void moveZeroes(int[] nums) {
int index = nums.length-1;
//从最后一个数往前遍历
for(int i=index;i>=0;i--) {
if(nums[i] == 0) {
for(int j=i+1;j<index+1;j++) {
nums[j-1] = nums[j];
}
nums[index--] = 0;
}
}
}
思路二:
只将非0值往前放,剩下的均为0,统一放在非0值之后,这样效率会更高,代码如下:
public void moveZeroes2(int[] nums) {
int j = 0;
//将非0值移动到前面
for(int i=0;i<nums.length;i++) {
if(nums[i] != 0) {
nums[j] = nums[i];
j ++;
}
}
//将非0值后面都置为0
for(int i=j;i<nums.length;i++) {
nums[i] = 0;
}
}