JSK-11 移除数组中的重复元素【入门】
程序员文章站
2022-06-11 16:18:02
...
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度。
例如:数组 A={1,1,2},你的程序应该输出 2 即新数组的长度,新数组为 {1,2}。
要求:不能新开数组分配额外的空间,即常数空间限制。
输入格式
输入一个整数 n(1≤n≤1000)。
接下来一行 n 个整数 Ai(−1000≤Ai≤1000),表示数组 A 中的每个元素。
输出格式
输出一个整数,表示新数组长度。
样例输入
5
0 0 1 1 2
样例输出
3
问题链接:JSK-11 移除数组中的重复元素
问题描述:(略)
问题分析:
这是一个简单题很容易想到怎么做。
这个题没有必要用数组存储数据,对输入的序列进行顺序处理就可以了。因为输入数据是升序的,所以判定输入数据是否重复,只需要对相邻的数进行比较就可以了。出现新的数时做一下计数便是要的结果,该计数变量初值设为0。
这个题没有按照题目的要求去做,写了一个不使用数组的程序来解。
原题分类为“双指针扫描”,实际上可以不那样做,而且逻辑更简单。另一方面,这样做就达不到锻炼使用双指针的目的了。
程序说明:
变量last用于存储前一个值,最初的时候需要是一个不存在的值才可以,根据Ai的数值范围取2000,是因为输入整数 Ai(−1000≤Ai≤1000)不可能是2000。
参考链接:(略)
题记:存储要能省则省。
AC的C语言程序如下:
/* JSK-11 移除数组中的重复元素 */
#include <stdio.h>
int main()
{
int n, a, last = 2000, cnt = 0, i;
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &a);
if(a != last)
cnt++;
last = a;
}
printf("%d\n", cnt);
return 0;
}
下一篇: 读取配置文件中的内容
推荐阅读