给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度。
例如:
数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2}
要求:
不能新开数组分配额外的空间。即常数空间限制。
提示:
输入一个整数n,以及其对应的数组A[n],输出新数组长度
样例输入:
5
0 0 1 1 2
样例输出:
3
这是一道变相的查找问题,并不是给你一个关键字让你去查找,而是查找数组中重复的数有几个。由于是升序排列的,又不能分配额外空间,所以我们可以考虑只需要元素前后比较,代码如下:
#include<stdio.h>
#include<stdlib.h>
intmain(void) {
int *a;
int i, n, len;
scanf("%d", &n);
if(n < 1)
return 0;
len = n;
a = (int *) malloc (n * sizeof(int));
if (!a)
return 0;
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n-1; i++)
if(a[i] == a[i+1])
len--;
printf("%d", len);
free(a);
return 0;
}