官方题解
package LeecodeStudy.leecode26;
/**
* Leecode26
* 力扣第二十六题
* @author wangWei
* @version 1.0
* @description
* @date 2023/2/13 23:49
*/
public class Leecode26 {
public static void main(String [] args) {
int[] nums = {1,1,1,3,3};
int i = removeNums(nums);
System.out.println(i);
}
public static int removeNums(int[] nums) {
//利用双指针思想,快指针用于扫描数据,慢指针用于记录返回数据
if (nums.length == 0) {
//如果数组为空,直接返回0即可。
return 0;
}
//定义慢指针,初始为1
int slow = 1;
//快指针从同样的位置开始扫描
for (int fast = 1; fast < nums.length ; fast++) {
if (nums[fast] != nums[slow-1]) {
//如果快指针与慢指针的元素不相同的情况下,说明还没有找到重复元素,那么元素插入时的最大位置就可以到fast的位置
//fast指针继续向前比对即可
nums[slow] = nums[fast];
//同时慢指针也得跟着向前推进。
slow++;
}
//如果两者元素相同说明元素要被删除,此时slow就不用动
}
//当循环结束以后,返回的slow指针就是最终的删除重复元素之后的数组的长度
return slow;
}
}