N個の整数の配列が与えられているとします。配列に合計が存在するペアの数をどのように数えることができますか?配列に合計が存在するペアの数を数えるアルゴリズム
など。 int a[] = {1, 3, 4, 6, 7}
。 (3 + 4)= 7、(1 + 6)= 7
指定された配列に重複する数字はなく、配列はソートされませんまた、アレイを変更することができ、アレイを維持する必要はありません。
私は以下の2つのコードを試しましたが、私のコードの複雑さを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つのペアがあるので、質問を更新しました –