import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int remove_duplicates (int[] nums) { // 和移除值相等的奶牛一样的道理 这次移除的是重复的 int slow = 0; int fast = 1; // 测试用例有空数组,所以我加上去了这个情况,面向测试用例编程 if(nums.length==0){ return 0; } // fast快指针遍历数组 while(fast<nums.length){ if(nums[slow]!=nums[fast]){ // 如果nums[slow]!=nums[fast] 此时先++slow再赋值,因为找到的不重复元素,必须放在索引为1开始的位置,索引为0的位置已经默认不重复 nums[++slow] = nums[fast]; } fast++; } return slow+1; } }
本题知识点:
1.数组索引和遍历
2.快慢指针运用
3.画图模拟
本题解题思路:
1.和移除值相等的奶牛一样的道理 这次移除的是重复的
2.fast快指针遍历数组
3.如果nums[slow]!=nums[fast] 此时先++slow再赋值,因为找到的不重复元素,必须放在索引为1开始的位置,索引为0的位置已经默认不重复
总结:利用双指针进行前后移动,关键:先++slow再赋值,想一想数组怎么赋值的就行了