Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
解题思路:把非零元素向前移动,把零元素向后移动,最后把移动后的元素置零。
package leedcode;
public class test {
public static void moveZeroes(int[] nums) {
int counter = 0;//非零元素的个数(初始化)
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
counter++;//非零元素的个数加一
continue;
} else {
nums[i - counter] = nums[i];//把非零元素移位,关键的一步
continue;
}
}
//把最后几位置为0
for (int i = nums.length - counter; i < nums.length; i++) {
nums[i] = 0;
}
}
// 主方法
public static void main(String[] args) {
int[] s = { 1, 2, 0,3, 1, 2 };
moveZeroes(s);
for(int i=0;i<s.length;i++){
System.out.println(s[i]);
}
}
}
java版本二
package arrayTest;
/**
* 将0元素移到最后,非零元素的相对位置不变。使用的是双指针,一个读取非零元素,另一个负责存储非零元素,最后将后面的元素置零
* @author duola
*
*/
public class moveZerosToLAst {
public static void moveZeroes(int[] nums) {
int i=0,j=0;
for(;i<nums.length;i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(;j<nums.length;j++){
nums[j]=0;
}
}
public static void main(String[] args) {
int[] a = { 0, 1, 3, 4, 0, 3, 0, 2 };
moveZeroes(a);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
}
}