目录
题目:
示例:
分析:
代码+运行结果:
题目:
示例:
分析:
找出两个数组中不一样的数,将nums1中有的数而nums2没有的数放在res[0]中,将nums2中有的数二nums1没有的数放在res[1]中.
那我们就可以使用set或者map来统计nums1和nums2中有的数(我测试过了,set和map的速度差不多,用哪个都可以),另外一个小技巧就是可以使用unordered_set(unordered_map)来提升速度,因为unordered底层是用的哈希表,而普通的set(map)使用的二叉树会将键值进行排序,而哈希表不排序,因此会更快一些.
另外一个小技巧就是在记录nums2的元素的时候,可以顺便看看有没有nums2有而nums1没有的元素,可以直接放进答案里,省去一个循环遍历.
为了避免重复包含,在检测到nums1没有,但是nums2有的时候(反过来也一样),应当再把元素添加进存放nums1的set中,在上面的动图中忘记显示出来了(懒得改了)大家看代码的时候能理解就行,
代码+运行结果:
class Solution {
public:
vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>s1,s2;
vector<vector<int>>res(2,vector<int>(0));
for(const int &num:nums1){ //遍历nums1,记录nums1含有的数
s1.insert(num);
}
for(const int &num:nums2){ //遍历nums2,同时可以检测在nums2中,nums1没有的数
s2.insert(num);
if(s1.count(num)==0){
res[1].push_back(num); //加入至答案
s1.insert(num); //避免重复包含
}
}
for(const int &num:nums1){ //遍历nums1,检测在nums1中,nums2没有的数
if(s2.count(num)==0){
res[0].push_back(num);
s2.insert(num);
}
}
return res;
}
};