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】
#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<