1、问题描述
返回两个数组的交
样例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].
2、实现思路
将两个数组排序,nums1的每个元素依次和nums2中元素比较是否相等,如果nums1中有重复的只需要比较一个,因为排过序,若nums1中的元素比nums2中某位置的值小,一定比nums2此元素之后所有的小,不需要比较,比较过了的nums2的元素不需要再比较了。
3、代码
class Solution {
public:
/**
* @param nums1 an integer array
* @param nums2 an integer array
* @return an integer array
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// Write your code here
vector<int> c;
int a=nums1.size();
int k=0;
int i,j,n;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
for(i=0;i<a;i++)
{if(i>0&&(nums1[i]==nums1[i-1])) continue;
for(j=k;j<nums2.size();j++)
{if(nums1[i]<nums2[j]) break;
if(nums1[i]==nums2[j])
{ c.push_back(nums1[i]);
k=j+1;
break;}
}
}
return c;
}
};
4、感想
两数组相同元素插入到新建的vector中,重复的只需要一个,if(i>0&&(nums1[i]==nums1[i-1])) continue;用此代码实现。