题意:找出两个数组的交集,要求交集没有重复元素,且对元素的顺序没有要求。
solution:做了几天的hash表,现在感觉这种题目已经很简单了。用hash记录一下元素是否出现,然后在检查第二个数组时,只需要判断该元素是否有出现即可(注意不能有重复元素,因此要销毁hash表的内容)。
note:为什么我不放在一个循环里?其实是可以的,循环的条件变为:nums1没结束 || nums1没结束,循环内还要判断具体哪一个没结束。在hash的处理上就不能以一个数组为标准,应该是互为标准。实现难度不大,不过感觉没这个必要。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> hash;
vector<int> res;
for ( auto n : nums1 ) {
if ( hash[n] == 0 ) {
hash[n] = 1;
}
}
for ( auto n : nums2 ) {
if ( hash[n] == 1 ) {
res.push_back(n);
hash[n] += 1;
}
}
return res;
}
};
submission:虽然说仅能排名28%但是从理论角度时间复杂度是0(M+N),是线性复杂度,没有再去细扣的必要。