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