1 条题解
-
0
📝 题目大意
给定 个整数 ,统计其中不同整数的个数。
💡 解题思路
-
题目分析:数据范围极小(),只有 个数,可以直接用排序或其他去重手段解决。因为只有 个元素,任何 甚至 的做法都能通过。
-
算法推导:
- 首先将 个整数读入数组 ,采用 索引方便后续操作。
- 对数组 进行升序排序,使得相同元素相邻。
- 初始化计数器 (至少存在 种不同的整数)。
- 从 到 ,依次比较 与 :
- 若 ,说明遇到了一种新的整数, 加 。
- 最终输出 。
-
边界与细节:
- 当 个数全部相同时, 始终保持初始值 ,输出 ,正确。
- 当 个数全部不同时,相邻比较每次都会触发 自增,最终 ,正确。
- 代码中变量 存储了 ,但后续未使用,不影响正确性。
⏱️ 复杂度分析
- 时间复杂度:(实际为 ,但常数级别,可视为 )
- 空间复杂度:(数组大小固定为 ,常数级)
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ int a[105], m = 1, n; // m 初始化为 1,表示至少有一种不同的数 for(int i = 1; i <= 5; i++) cin >> a[i]; // 读入 5 个整数 sort(a + 1, a + 5 + 1); // 对 5 个数升序排序,使相同元素相邻 n = a[1]; // 记录第一个元素(备用) for(int i = 1; i <= 4; i++) if(a[i] != a[i + 1]) // 相邻元素不同,说明遇到了新种类的数 m++; // 种类数 +1 cout << m; // 输出结果 return 0; } -
- 1
信息
- ID
- 633
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者