#A B的差集
思路:对于这个查找的题,如果用一般的循环去查找,时间复杂度为O(n2),肯定是不能Accepted的,那么我们是否可以将时间复杂度降低到O(n)呢?为了达到这个目的,我们需要用到下面的容器
- set
- 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;
}