方法1
先把非零元素提到前面来,后面填充0
class Solution {
public void moveZeroes(int[] nums) {
int j = 0;//j为下一个放置非零数字的位置
//第一次遍历,把非零元素提到前面来
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[j] = nums[i];
j++;
}
}
//剩余空位补0
for (int i = j; i < nums.length; i++) {
nums[i] = 0;
}
}
}
方法二
双指针,交换0与非零元素
class Solution {
public void moveZeroes(int[] nums) {
int j = 0; // j表示存放下个非零元素的位置
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
swap(nums, i, j);
j++;
}
}
}
public void swap(int[] nums, int m, int n) {
int tmp = nums[m];
nums[m] = nums[n];
nums[n] = tmp;
}
}