题目大意:给出一个排过序的数组,要求不是用额外的数组空间去除数组中重复的元素,最后返回数组的新长度,并且数组是整理后的。
算法思想:用一个游标记录新数组的末端,然后用一个中间变量不断比较相邻的两个元素,相同时继续执行,不同时则将不同的元素赋值给中间变量,然后放置到新数组,游标后移。最后返回扫描完整个数组后的游标值(既数组的长度)。
代码如下:
class Solution {
public:
int removeDuplicates(int A[], int n) {
int p=1;//记录末端
int temp=0;//中间变量
/*for(int i=0;i<n;i++){
cin>>A[i];
}*/
if(n==0) return 0;
temp=A[0];
for(int i=1;i<n;i++){
if(temp==A[i]){
continue;
}
else{
temp=A[i];
A[p++]=A[i];
}
}
return p;
}
};