如何打印所有唯一对的总和比O(n ^ 2)c ++快k的计数?

时间:2018-07-14 08:03:04

标签: c++

#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)快。

1 个答案:

答案 0 :(得分:1)

将数字放入哈希表中,并对其进行计数,这是O(n)操作。

然后为每个v[i]数字,检查哈希表中的k-v[i],然后对计数求和,这也是O(n)运算。

结果将是总计数除以2。