A-B差集(即在A但不在B的数)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36124194/article/details/78885197

A B的差集

这里写图片描述

思路:对于这个查找的题,如果用一般的循环去查找,时间复杂度为O(n2),肯定是不能Accepted的,那么我们是否可以将时间复杂度降低到O(n)呢?为了达到这个目的,我们需要用到下面的容器
1. set
2. vector

思路

  • 首先用两个vector存好输入的数据
  • 将两个vector的数据转化为set的数据,由于set的自动去重功能,次数set的数据都是唯一的。
  • 我们每次将set1中的一个数据插入set2当中,看看set2的size大小有没有改变,若改变了,即代表插入成功(与set2数据不重复),若不成功,则这个数据就是A-B的一个数据成员。
#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main() {
    int time;
    cin >> time;
    while(time--) {
        vector<int> v1, v2, result;
        int num1;
        cin >> num1;
        while(num1--) {//input v1
            int temp;
            cin >> temp;
            v1.push_back(temp);
        }

        int num2;
        cin >> num2;
        while(num2--) {//input v2
            int temp;
            cin >> temp;
            v2.push_back(temp);
        }

        set<int> set1(v1.begin(), v1.end());
        set<int> set2(v2.begin(), v2.end());

        for(auto it1 = set1.begin(); it1 != set1.end(); it1++) {
            int size2 = set2.size();
            set2.insert(*it1);
            if(size2 != set2.size()) {//judge
                result.push_back(*it1);
            }
        }

        for(int i = 0; i < result.size(); i++) {
            if(i != result.size()-1) {
                cout << result[i] << " ";
            }else {
                cout << result[i];
            }

        }
        cout << endl;
    }
    return 0;
}
阅读更多

没有更多推荐了,返回首页