2つのデータセットの差
【テーマ】
A、Bの2つの整数の集合、1つのアルゴリズムを設計して彼らの交差を求めて、できるだけ効率的です.
【出所】
テンセントの2014校はソフトウェアの開発の筆記試験のテーマを募集します
【考え方一】
集合Aと集合Bを並べ替える(昇順,早送り,平均複雑度O(N*logN)).
2つのポインタpとqを設定し、集合Aと集合Bの最初の要素(昇順ソート済み)を指す.集合の交差を1つのコンテナvectorで記録します.
2つの要素のサイズが等しい場合は、集合交差要素であることを示し、交差vectorに追加します.
2つの要素のサイズが等しくない場合、pとqの小さな値のポインタは、次の要素を指します.
1つのセットに比較可能な要素がないまで、順番に操作します.
ソート:O(nlogn)
比較:O(n)
時間複雑度:O(n+nlogn+nlogn)
【コード1】
A、Bの2つの整数の集合、1つのアルゴリズムを設計して彼らの交差を求めて、できるだけ効率的です.
【出所】
テンセントの2014校はソフトウェアの開発の筆記試験のテーマを募集します
【考え方一】
集合Aと集合Bを並べ替える(昇順,早送り,平均複雑度O(N*logN)).
2つのポインタpとqを設定し、集合Aと集合Bの最初の要素(昇順ソート済み)を指す.集合の交差を1つのコンテナvectorで記録します.
2つの要素のサイズが等しい場合は、集合交差要素であることを示し、交差vectorに追加します.
2つの要素のサイズが等しくない場合、pとqの小さな値のポインタは、次の要素を指します.
1つのセットに比較可能な要素がないまで、順番に操作します.
ソート:O(nlogn)
比較:O(n)
時間複雑度:O(n+nlogn+nlogn)
【コード1】
#include
#include
#include
#include
using namespace std;
vector IntersectionSet(vector set1,vector set2){
int size1 = set1.size();
int size2 = set2.size();
//
sort(set1.begin(),set1.end());
sort(set2.begin(),set2.end());
int i = 0,j = 0;
vector result;
//
while(i < size1 && j < size2){
//
if(set1[i] == set2[j]){
result.push_back(set1[i]);
++i;
++j;
}//if
//
else if(set1[i] < set2[j]){
++i;
}//else
else{
++j;
}//else
}//while
return result;
}
int main(){
vector set1 = {1,22,6,9,11,5};
vector set2 = {2,10,11,4,22,3,15};
vector result = IntersectionSet(set1,set2);
for(int i = 0;i < result.size();++i){
cout<