题目
给定一个已排序的数组,使用就地算法将重复的数字移除,使数组中的每个元素只出现一次,返回新数组的长度。
不能为数组分配额外的空间,你必须使用常熟级空间复杂度的就地算法。
例如,
给定输入数组 A=[1,1,2],
你给出的函数应该返回length=2,A数组现在是[1,2]。
思路
1.一开始看题目不注意很容易死简单化,因为这里还要使用就地算法把数字移除,即返回前n位是去重之后的结果。
使用快慢指针的方法。
先把慢指针 放在i=0的位置,然后给定快指针,如果与慢指针不等,则独立count++;并且把count++的那个下标的值赋给第二个独立值。
参考:https://blog.csdn.net/qq_40416052/article/details/82054747
代码
public class Solution {
public int removeDuplicates(int[] A) {
int n = A.length;
if(n==0){
return 0;
}
int num = 0;
for(int i = 1;i<n;i++){
if(A[i]!=A[num]){
num++;
A[num]=A[i];
}
}
return num+1;
}
}
总结
快慢指针的巧用