跟383.Ransom Note的思路一样。不同的是这个题不用计数。题目没给数据规模,我自己随便写了个-10000到+10000的范围,过了,beats10%,改成-1000到+1000也能过,beats44%,感觉速度消耗主要在初始化上了。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int>hash(2001, 0);
vector<int>result;
for (int i=0; i < nums1.size(); i++)
hash[nums1[i]+1000]=1;
for (int i = 0; i < nums2.size(); i++)
if (hash[nums2[i] + 1000] > 0) {
result.push_back(nums2[i]);
hash[nums2[i] + 1000] = 0;
}
return result;
}
};
最优解用了set容器。用时8ms,我的用了6ms,感觉调用已有的函数比较慢啊。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> m(nums1.begin(), nums1.end());
vector<int> res;
for (auto a : nums2)
if (m.count(a)) {
res.push_back(a);
m.erase(a);
}
return res;
}
};