题目
(349)两个数组的交集
解法一:暴力算法,排序+双指针
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> nums3;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
for (int i = 0; i < nums1.size(); i++){
for (int j = 0; j < nums2.size(); j++){
if( nums1[i] == nums2[j] ){
if(nums3.size() == 0 || nums1[i] != nums3.back()){
nums3.push_back(nums1[i]);
}
}
}
}
return nums3;
}
};
解法二:哈希
但是要注意,使用数据来做哈希的题目,题目中只有小写字母,或者数值大小在[0- 10000] 之内等等。题目没有限制数值的大小,就无法使用数组来做哈希表了。而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
unordered_set<int> nums_set(nums1.begin(),nums1.end() );
for (int num : nums2){ //增强型for循环
if (nums_set.find(num) != nums_set.end()){
//find的返回值是一个迭代器(iterator),如果找到了会返回指向目标元素的迭代器,没找到会返回end()
result_set.insert(num);
}
}
return vector<int> (result_set.begin(), result_set.end());
}
};