题目:
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].
思路:
找出nums2与nums1相交的元素,若重复,则只要一个。
具体思路见代码
新方法代码:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
set<int> setnums1(nums1.begin(),nums1.end());//将两个vector的数值放到set里去年重合的
set<int> setnums2(nums2.begin(),nums2.end());
for(set<int>::iterator iter1=setnums1.begin(),iter2=setnums2.begin();
iter1!=setnums1.end()&&iter2!=setnums2.end();){//分别从两个set从头往后循环,如果都没有到结尾(有一个到结尾就跳出循环)
if(*iter1==*iter2){//如果两个值相等
result.push_back(*iter1);//这个值就为重合的
++iter1;//iter1和iter2都后移
++iter2;
}
else if(*iter1<*iter2){//如果*iter1值小,iter1后移
++iter1;
}
else if(*iter1>*iter2){//如果*iter2值小,iter2后移
++iter2;
}
}
return result;
}
};
输出结果: 9ms
原始代码:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
for (vector<int>::iterator ix = nums1.begin(); ix != nums1.end(); ++ix){
for (vector<int>::iterator iy = nums2.begin(); iy != nums2.end(); ++iy){
if (*ix == *iy){//以nums1为外循环,nums2为内循环,若发现nums2中
result.push_back(*iy);//有nums1中相等的值,放到result中
for (unsigned int i = 0; i < result.size() - 1; ++i){//因为要除去相同的,所以要再循环result,
if (result[i] == result[result.size() - 1]){//如果最后一个保存的值与原有相等,则再删除
result.pop_back();
}
}
}
}
}
return result;
}
};
输出结果: 76ms