原题链接:283.Move Zeroes
【思路】:
基本解题思路是从左到右,第一次出现0时,记下位置firstZero,继续向右遍历,一旦出现非0的数,就与firstZero交换,同时firstZero++,直到数组结尾。其过程如下所示:
2 0 5 0 0 12 0
^firstZero
2 5 0 0 0 12 0
^firstZero
2 5 12 0 0 0 0
^firstZero
public class Solution {
public void moveZeroes(int[] nums) {
int len = nums.length;
int firstZero = -1; //remark the first location of 0, biginning with -1
int tmp; //the integet will be used when two nums are exchanged
for(int i=0; i<len; i++) {
if(nums[i] != 0) {
if(firstZero >= 0) {
tmp = nums[i];
nums[i] = nums[firstZero];
nums[firstZero] = tmp;
firstZero++; //now, the firstZero should move to next
}
} else {
if(firstZero < 0) firstZero = i;
}
}
}
}
12 / 12 test cases passed. Runtime: 7 ms