欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}