给定排序数组A,需要在原地删除重复出现的元素,使得每个元素只出现元素一次,返回移除后数组的新长度
leetcode原题位置删除排序数组中的重复项
这里使用的是双指针,利用快指针快速遍历所有元素,慢指针替换所有不相同的元素
思路:这里使用两个指针,slow和fast两个指针,fast指针用于遍历数组中的所有元素,而slow指针用于确定数组中所有不相同的元素,关键语句是
if (A[slow] != A[fast]){
A[slow + 1] = A[fast];
slow++;
}
用于判断slow位置的元素与fast位置是否相同,如果相同就继续遍历,当不相同的时候就将fast位置对应的元素复制到slow + 1的位置上同时更新slow 为 slow + 1,然后继续迭代遍历
完整代码如下
public static int getNum(int[] A){
int slow = 0;
int fast = 1;
int length = A.length;
while (fast < length){
//这里 slow指针 之前的是绝对没有重复的,
//故fast指针对应的位置的元素值如果与slow位置的元素值不相同,
//就将fast对应元素值复制到 slow + 1的位置上,
//同时更新slow指针
//直至fast指针遍历完全
if (A[slow] != A[fast]){
A[slow + 1] = A[fast];
slow++;
}
fast++;
}
return slow + 1;
}