都是easy,没一个会做的。。。。
方法一,所谓的双指针
先对两个数组排序,然后两个指针分别从两个数组首元素开始遍历,若相同则加入要返回的数组,若不同,较的加一,直至其中至少一个数组到末尾
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int>nums3;
int i=0,j=0;
for(;i<nums1.size()&&j<nums2.size();){
if(nums1[i]==nums2[j]){
nums3.push_back(nums1[i]);
++i;
++j;
}
else if(nums1[i]<nums2[j])
++i;
else
++j;
}
return nums3;
}
};
方法二,map
想到了map但是没想到可以先把遍历一个加进去,再遍历另一个数组,若有相同的元素,元素对应值减一,同时输出一次。