不同的数字
给定 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。
刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
不同的数字
给定 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)。
这个问题可以通过遍历输入的数列来解决。我们可以使用一个数组或哈希表来存储已经出现过的数字,并维护一个计数器来记录不同的整数的数量。具体步骤如下:
以下是使用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 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!
