【LeetCode】 349. 兩個陣列的交集
阿新 • • 發佈:2018-11-03
1.題目
給定兩個陣列,編寫一個函式來計算它們的交集。
2.思路
step1:遍歷兩個向量;
step2:把重複的元素加入到set中(set不重複)
step3:返回set對應的vector
注意:陣列1、2為空集的時候,直接返回空集
3.程式碼
vector<int> intersection(vector<int>& nums1, vector<int>& nums2){
set<int>res;
if(nums1.size()==0||nums2.size()==0)
return {};
else{
for(int i=0;i<nums1.size();i++){
for(int j=0;j<nums2.size();j++){
if(nums1[i]==nums2[j]){
cout<<" "<<nums1[i]<<endl;
res.insert(nums1[i]);
break;
}
}
}
}
set<int>::iterator t;
for(t=res.begin();t!=res.end();t++){
cout<< *t<<" ";
}
vector<int> re(res.begin(),res.end());
return re;
}
4.優秀案例
遍歷nums1,把元素存在在nums1Map中,以元素為key,元素對應數量為value;
遍歷nums2,如果nums2中元素在map中value大於0,則把此元素放入res向量中;
返回向量res。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int> & nums2) {
map<int,int> nums1Map;
for(int i = 0; i < nums1.size(); i++){
nums1Map[nums1[i]]++;
}
vector<int> resVec;
for(int i = 0; i < nums2.size(); i++){
if(nums1Map[nums2[i]] > 0){
resVec.push_back(nums2[i]);
nums1Map[nums2[i]] = -1;
}
}
return resVec;
}
};