题解:丢失的数据
题目分析
在这个问题中,我们需要从一个丢失了部分数据的序列中,找出 1 到 kkk 之间缺失的数字,并计算这些缺失数字的和。
已知 nnn 是数据集中保存下来的数字个数,而数据的范围本应是 111 到 kkk。任务是通过分析现有数据,找出缺失的数字并计算它们的和。
解题思路
1. 数学公式:
* 111 到 kkk 的所有整数的和可以通过公式计算:
[
S = \frac{k \times (k + 1)}{2}
]
* 该公式是常见的求 1 到 kkk 连续自然数和的公式。
2. 处理数据:
* 将传输后的数据集中,属于 111 到 kkk 范围内且没有重复出现的数字累加起来,记为 qqq。
* 最终的答案就是 S−qS - qS−q,即总和减去序列中存在的数字的和。
3. 细节处理:
* 序列中的数字可能会重复出现,但根据题目要求,每个数字只取一次,这就需要用一个哈希表(unordered_map)来记录哪些数字已经出现过。
* 我们只处理数据集中 111 到 kkk 范围内的数字,超出范围的数字无需考虑。
4. 时间复杂度:
* 我们使用一个哈希表来标记已经出现的数字,这样每个数字只处理一次,整体时间复杂度为 O(n)O(n)O(n),可以满足 nnn 最大为 2×1052 \times 10^52×105 的要求。
AC代码