计算两个数组的交
注意事项:
每个元素出现次数得和在数组里一样
答案可以以任意顺序给出
样例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].
排序+双指针
和547相同,这里不过要求不去重,不去重相对来说是简单的,排序后用双指针是最简单的一个方法:
vector<int> intersection(vector<int> nums1, vector<int> nums2) {
// write your code here
if(nums1.empty()||nums2.empty()) //特殊情况
return vector<int>();
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
//双指针
auto beg1=nums1.begin();
auto beg2=nums2.begin();
vector<int> res;
//双指针遍历
while(beg1!=nums1.end()&&beg2!=nums2.end())
{
if(*beg1==*beg2)
{
res.push_back(*beg1);
beg1++;
beg2++;
}
else if(*beg1<*beg2)
{
beg1++;
}
else beg2++;
}
return res;
}
基本上没有什么要注意的,特殊情况排除掉就可以了。