1. 程式人生 > >【LeetCode】 349. 兩個陣列的交集

【LeetCode】 349. 兩個陣列的交集

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; } };