TA的每日心情 | 无聊 4 小时前 |
---|
签到天数: 44 天 [LV.5]常住居民I
注册会员

- 积分
- 74
|
一、问题描述给定N个整数和一个整数C,要求统计所有满足A-B=C的数对(A,B)的数量。其中A和B都是给定数组中的元素,且位置可以相同。 二、算法核心思想三、完整代码实现(带详细注释)
- #include <iostream>
- #include <unordered_map>
- #include <algorithm>
- using namespace std;
- const int MAXN = 2e5 + 5; // 定义最大数组大小
- long long nums[MAXN]; // 存储输入数字的数组
- int main() {
- int n; // 数字个数
- long long c; // 目标差值C
- cin >> n >> c; // 输入n和c
-
- // 使用哈希表统计每个数字出现的次数
- unordered_map<long long, int> countMap;
- for(int i = 0; i < n; i++) {
- cin >> nums[i]; // 读取数字
- countMap[nums[i]]++; // 统计该数字出现次数
- }
-
- long long res = 0; // 初始化结果计数器
- for(int i = 0; i < n; i++) {
- long long target = nums[i] + c; // 计算需要的B值(A-B=C => B=A-C)
- res += countMap[target]; // 累加满足条件的B的数量
- }
-
- cout << res << endl; // 输出结果
- return 0;
- }
复制代码
四、算法分步解析输入处理:
读取数字个数n和目标差值c 定义足够大的数组存储输入数字
统计频率:
计算结果:
遍历数组中的每个数字作为A 计算对应的B值(B=A-C) 通过哈希表快速查询B的出现次数并累加
输出结果:
来源:洛谷题解
|
|