现在写的可能不太高效,先记录下来以后有好算法再说。本题是已经排好序的,若无此条件得先排序。
给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度。
例如:
数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2}
要求:
不能新开数组分配额外的空间。即常数空间限制。
提示:
输入一个整数n,以及其对应的数组A[n],输出新数组长度
样例输入
5 0 0 1 1 2
样例输出
3
#include <stdio.h>
int removeduplicate(int a[], int n)
{
int t = 0;
for(int i=1;i<=n;i++)
if(a[i-1]==a[i])
a[i-1]=a[i],t++;
return n-t;
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("%d\n",removeduplicate(a, n));
return 0;
}