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 };

 

posted @ 2021-02-08 14:00  Mrsdwang  阅读(37)  评论(0)    收藏  举报