- 想到的思路是借用选择排序的一些思路设置一个指针,然后把后面不是0的数依次赋值到前面, 来,最后把剩下的数直接置0.
代码如下:
public void moveZeroes(int[] nums) {
int i = 0;
for (int j = 0; j < nums.length; j++) {
if (nums[j] != 0) {
nums[i++] = nums[j];
}
}
for (; i < nums.length; i++) {
nums[i] = 0;
}
}
- 官方给了一个双指针的解法,没有置0只有互换,大概思路就是左指针和右指针先找个0,然后左指针不动了,右指针去找第一个不是0的数,然后和左指针互换,然后左指针+1右指针继续找。
代码如下:
public void moveZeroes(int[] nums) {
int n = nums.length, left = 0, right = 0;
while (right < n) {
if (nums[right] != 0) {
swap(nums, left, right);
left++;
}
right++;
}
}
public void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}