题目链接放在这里了:
这道题是典型的双指针滑动窗口,并且窗口大小是可变的,我们直接上两个指针,注意在处理这类题目的时候一定要想好了左指针和右指针都指向谁,什么时候移动左指针,什么时候移动右指针;
这道题的具体代码和思路如下:
java
class Solution {
public void moveZeroes(int[] nums) {
if(nums == null||nums.length==0){
return;
}
//左指针
int j = 0;
//右指针作为主遍历
for(int i = 0;i<nums.length;i++){
if(nums[i] != 0){
int tmp = nums[i];
nums[i] = nums[j];
nums[j++] = tmp;
}
}
}
}
这题的目的是处理一个数组,使其内部的非0元素顺序不变的同时,0元素都移到数组的后面。这道题我在做的时候想比较简单,就是遍历这个数组的同时如果遇到了0元素就进行一个自循环,查找它后面的首个非0元素并交换位置,依次往复,如果已经处理完就像1,3,2,0,0,0这种的时候,会判断后面还有没有非0元素,如果没有就跳出循环,返回数组,但实际上我的这种做法效率比较低,毕竟嵌套了自循环;
推荐的做法是双指针,我们首先定义一下左右指针,左指针也就是慢指针,我让左指针指向最左边的0,让右指针指向非0数字,然后一满足这个条件我就交换值,把第一个0换到后面去,然后移动左指针让他再次指向最左边的0,这个逻辑走下去,最左边的0一满足条件就会被换到右边去,依次往复就可以完成题目要求了;