#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
int cnt = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (v[i] + v[j] == k)
cnt++;
}
}
cout << cnt;
return 0;
}
此代码搜索所有总和等于k的不重复对,然后计算多少个不重复对等于k。有没有一种方法可以更快地完成此任务,例如比O(n ^ 2)快。
答案 0 :(得分:1)
将数字放入哈希表中,并对其进行计数,这是O(n)操作。
然后为每个v[i]
数字,检查哈希表中的k-v[i]
,然后对计数求和,这也是O(n)运算。
结果将是总计数除以2。