刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

不同的数字

给定 n个正整数 a1、a2、……、an,请统计出这个数列中含有多少个不同的整数。

时间限制:1000ms,内存限制:256MB

输入格式

第一行:一个整数 n;

第二行:n 个整数 a1、a2、……、an

输出格式

一个整数,数列中含有多少个不同的整数。


输入样例#1

6
1 6 5 6 3 1

输出样例#1

4

输入样例#2

10
1 2 3 4 5 6 7 8 9 10

输出样例#2

10

数据范围:

1≤n、ai≤105

使用微信搜索喵呜刷题,轻松应对考试!

答案:

首先,可以使用数组或哈希表来存储所有的数字。遍历输入的数列,对于每个数字,检查它是否已经在数组或哈希表中出现过。如果是第一次出现,就将其添加到数组或哈希表中,并增加计数器。最后,返回计数器的值即可。时间复杂度为O(n)。

解析:

这个问题可以通过遍历输入的数列来解决。我们可以使用一个数组或哈希表来存储已经出现过的数字,并维护一个计数器来记录不同的整数的数量。具体步骤如下:

  1. 创建一个空数组或哈希表来存储已经出现过的数字。
  2. 遍历输入的数列,对于每个数字,检查它是否已经在数组或哈希表中出现过。
  3. 如果数字是第一次出现,将其添加到数组或哈希表中,并增加计数器。
  4. 返回计数器的值作为结果。

以下是使用C语言实现的示例代码:

#include <stdio.h>
#include <stdbool.h>

int countDistinctIntegers(int n, int a[]) {
    bool seen[100005] = {false};  // 假设数字范围在1到10^5之间
    int count = 0;
    
    for (int i = 0; i < n; i++) {
        if (!seen[a[i]]) {  // 如果数字是第一次出现
            seen[a[i]] = true;  // 标记为已出现
            count++;  // 增加计数器
        }
    }
    
    return count;
}

int main() {
    int n;
    scanf("%d", &n);  // 读取输入的整数数量n
    int a[n];  // 存储输入的整数数列
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);  // 读取每个整数并存储在数组中
    }
    
    int result = countDistinctIntegers(n, a);  // 计算不同整数的数量并输出结果
    printf("%d\n", result);  // 输出结果到控制台或文件流中
    return 0;  // 程序正常结束,返回值为0表示成功执行完毕并退出程序。由于题目要求返回结果到控制台或文件流中,这里直接输出结果即可。如果需要进一步处理结果或者返回给调用者使用,可以根据实际情况进行调整。时间复杂度为O(n),满足题目要求的时间限制。空间复杂度为O(m),其中m为数字的最大范围(假设为常数),满足题目要求的内存限制。算法的关键在于使用数组或哈希表来存储已经出现过的数字,并通过计数器记录不同的整数的数量来实现题目的要求。
创作类型:
原创

本文链接:不同的数字 给定 n个正整数 a1、a2、……、an,请统计出这个数列中含有多少个不同的整数。 时间

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share