本题也属于easy模式,题意是说去掉一个有序数组中的重复部分,而且不需要额外的开销,只能在初始数组中做文章。这种题目就有一种固定的套路,就是使用两个指标,一个向前走,一个断后,我定义的i就是取到数组中的每一个数,pos是去掉重复之后的位置。最后多说一句,一定要注意判断原数组是否为空啊,粗心马虎真的不可取,谨记!
#include<stdio.h>
#include<stdlib.h>
int removeDuplicates(int A[], int n)
{
if(n==0)
return 0;
int i=0,pos=1,tmp=A[0];
for(i=1;i<n;i++)
{
if(tmp==A[i])
continue;
else
{
A[pos++]=A[i];
tmp=A[i];
}
}
return pos;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int *a=(int *)malloc(sizeof(int)*n);
int i,len;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
len=removeDuplicates(a,n);
for(i=0;i<len-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[len-1]);
printf("New Length:%d\n",len);
}
return 0;
}