删除一维数组中所有相同的数,使之只剩一个

659 阅读1分钟

1 题目

函数:fun()

功能:删除一维数组中所有相同的数,使之只剩一个。

描述:数组中的数据已经按照从小到大排列,函数返回删除后数组中元素的个数 举例:

一维数组中的数据是:2,2,2,2,3,3,4,4,5,6,6,6,7,7,8,9,9,9,10,10

删除后数组中的内容是:2,3,4,5,6,7,8,9,10

2 思路

初始化没有重复元素最右方的指针 a

当前元素与前一个元素进行比较,如果相同,则调到下一个,否则指针a+1

3 代码

#include <stdio.h> 
#include <stdlib.h>
#define N 20

/**
函数:fun()
功能:删除一维数组中所有相同的数,使之只剩一个。
描述:数组中的数据已经按照从小到大排列,函数返回删除后数组中元素的个数
举例:
一维数组中的数据是:2,2,2,2,3,3,4,4,5,6,6,6,7,7,8,9,9,9,10,10
删除后数组中的内容是:2,3,4,5,6,7,8,9,10
**/



int fun(int *s) {
	int a = 1;
	for (int i = 1; i < N; ++i) {
		if (*(s+i) != *(s+i-1)) {  // 当前元素与前一个元素进行比较,如果相同,则调到下一个,否则a+1
			*(s+a) = *(s+i);
			a++;
		}
	}
	return a;
}


int main(int argc,char const *argv[]) { 
	int s[N] = {2,2,2,2,3,3,4,4,5,6,6,6,7,7,8,9,9,9,10,10};
	int cnt = fun(s);
	printf("删除后的数组元素个数为:%d\n",cnt);
}

示例结果:

$ gcc ex005.c -o demo
$ ./demo
删除后的数组元素个数为:9