将数组中所有的零元素移到数组末尾。
思路:寻找 0元素,移动到末尾。
public class Solution {
public void moveZeroes(int[] nums) {
int count = 0;
int i,j;
for(i = 0;i < nums.length - count;i ++){
if(nums[i] == 0){
for(j = i+1;j < nums.length;j ++){
nums[j-1] = nums[j];
}
nums[j-1] = 0;
count ++;
}
if(nums[i] == 0){
i --;
}
}
}
}
其他答案:O(n)的算法,对比起来自己的笨死了。一次遍历,将所有非零结果放到数组前面,然后一次性填充0
public class Solution {
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) return;
int insertPos = 0;
for (int num: nums) {
if (num != 0) nums[insertPos++] = num;
}
while (insertPos < nums.length) {
nums[insertPos++] = 0;
}
}
}