给定一个N个整数的数组。我如何计算数组的总数存在的对的数量?计算在数组中存在总和的对数的算法
E.g. int a[] = {1, 3, 4, 6, 7}
。这里有三个这样的对:(1 + 3)= 4,(3 + 4)= 7,(1 + 6)= 7.
给定数组中没有重复的数字, 。也可以改变数组,不需要维护数组。
我曾尝试以下两个代码,但我想减少我的代码的复杂性小于O(N^2)。
尝试1:(复杂度为O(n^3))
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
main(){
int i,input,j,n,ans=0,sum;
cin>>n;
vector<int> vec;
for(i=0;i<n;i++){
cin>>input;
vec.push_back(input);
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
sum=vec[i]+vec[j];
if(find(vec.begin(),vec.end(),sum)!= vec.end()){
ans++;
}
}
}
cout<<ans;
}
你检查所有的对,如果他们的总和就是你增加一个计数器 – user463035818
数组中展示你的尝试和它是如何失败的。 SO不是代码写作服务 – user463035818
我增加了我的代码,同时也更新了一个问题,会有3对对于给定的数组 –