原題目:
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2,
2]
, return [2]
.
Note:
- Each element in the result must be unique.
- The result can be in any order.
(1)先對兩個數組進行排序,之後用兩個初始爲0的變量j,k分別指向兩個數組,若nums1[j]=nums2[k],則將值加到結果中,因爲nums1和nums2中元素可能重複,故應當增加j或k的值,使得nums1[j] != nums2[k];若nums1[j] < nums2[k],則j加1;否則另k加1。算法複雜度等於排序複雜度,即爲O(nlogn)。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> v;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int j=0, k=0, l1=nums1.size(), l2=nums2.size();
while(j<l1 && k<l2)
{
if(nums1[j] == nums2[k])
{
v.push_back(nums1[j++]);
while(j<l1 && nums1[j]==nums1[j-1]) j ++;
}
else if(nums1[j] < nums2[k]) j ++;
else k ++;
}
return v;
}
};
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> s;
vector<int> v;
for(int i=0; i<nums1.size(); i++)
if(s.find(nums1[i]) == s.end())
s.insert(nums1[i]);
for(int i=0; i<nums2.size(); i++)
if(s.find(nums2[i]) != s.end())
{
v.push_back(nums2[i]);
s.erase(nums2[i]);
}
return v;
}
};