349. Intersection of Two Arrays
j仅供自己学习
思路:
把其中一个数组存入hash表,然后直接查看另一个数组的元素是否也在hash表中,有就加入新的hash表。为什么不是vector中呢,因为这样会添加重复的相同元素进去,所以set具有除重复的特性。
代码
1 class Solution { 2 public: 3 vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { 4 unordered_set<int> num(nums1.begin(),nums1.end()),res; 5 6 for(auto a: nums2){ 7 if(num.count(a)) res.insert(a); 8 } 9 return vector<int> (res.begin(),res.end()); 10 } 11 };
另一种方法就是,将一个数组升序排序后 调用二分搜索,并且另一个数组的每个元素都作为一个target传入,调用n次即可。
代码:
1 class Solution { 2 public: 3 vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { 4 unordered_set<int> res; 5 sort(nums1.begin(),nums1.end()); 6 for(auto a: nums2){ 7 if(binarysearch(nums1,a)) 8 res.insert(a); 9 } 10 return vector<int> (res.begin(),res.end()); 11 } 12 bool binarysearch(vector<int>& nums1,int target){ 13 int right=nums1.size(),left=0,mid=0; 14 while(left<right){ 15 mid =left+(right-left)/2; 16 if(nums1[mid]==target) return true; 17 else if(nums1[mid]<target) left=mid+1; 18 else right = mid; 19 } 20 return false; 21 } 22 };

浙公网安备 33010602011771号