最初的思路:
int removeDuplicates(int* nums, int numsSize){
int Size=numsSize;
int data;
for(int i=0,j=i+1;j<Size;){
if(nums[i]!=nums[j]){
i++;j++;
}
else{
for(int k=j,data=nums[j];k<Size-1;k++){ //用data保存重复项
nums[k]=nums[k+1]; //然后用遍历依次将后面的项前移
} //再将data放在最后
nums[Size-1]=data;
Size--;
}
}
return Size;
}
改进:
int removeDuplicates(int* nums, int numsSize){
int j=0;
{int k=1;
while(k<numsSize){
if(nums[j]!=nums[k]){ //j和k刚开始是前后两项,如不重复,则一直自我覆盖
nums[++j]=nums[k++]; //如果存在重复,则k后移到不重复的那一项,再覆盖到前面的重复项
}
else{
k++;
}
}
}
return j+1;
}