C++ 统计数对数量:a-b=c
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n, c;
cin >> n >> c;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
unordered_map<int, int> count_map;
int count = 0;
for (int i = 0; i < n; i++) {
count += count_map[nums[i] - c];
count_map[nums[i]]++;
}
cout << count << endl;
return 0;
}
问题描述:
给出一串数以及一个数字 c,要求计算出所有 a-b=c 的数对的个数(不同位置得到数字一样的数对算不同的数对)。
输入:
共两行。第一行两个整数 n,c 。
第二行 a1,a2,a4... 个整数 ( ),作为要处理的那串数。
输出:
该数串中包含的满足a-b=c 的数对的个数
样例输入:
6 3 8 4 5 7 7 4
样例输出:
2
代码解释:
- 使用
unordered_map存储每个数字出现的次数。 - 遍历数字序列,对于每个数字
nums[i],查找nums[i] - c是否存在于count_map中,如果存在,则将count_map[nums[i] - c]加到count上,表示找到了一对满足条件的数。 - 最后输出
count的值,即满足条件的数对数量。
代码特点:
- 使用哈希表,可以快速查找数字是否存在,时间复杂度为 O(n)。
- 代码简洁易懂,易于理解和学习。
应用场景:
该代码可以应用于各种需要统计数对数量的场景,例如:
- 统计一个数组中所有差值为 c 的数对数量
- 统计一个字符串中所有出现次数相同的字符对数量
- 统计一个图中所有距离为 c 的节点对数量
进一步优化:
- 可以使用
map代替unordered_map,但是时间复杂度会从 O(n) 变为 O(nlogn)。 - 可以使用其他数据结构,例如
set,来优化代码性能。
总结:
该代码提供了一个使用哈希表高效统计数对数量的解决方案,可以应用于各种场景,并可以进一步优化。
原文地址: https://www.cveoy.top/t/topic/igLt 著作权归作者所有。请勿转载和采集!