349. Intersection of Two Arrays
程序员文章站
2022-07-15 10:46:31
...
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> res,s(nums1.begin(),nums1.end());
for(auto a:nums2){
if(s.count(a))
res.insert(a);
}
return vector<int>(res.begin(),res.end());
}
set.count()返回0或者1,用来判断set中是否存在某一键值。
c++中的set
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int i=0,j=0;
while(i<nums1.size()&&j<nums2.size()){
if(nums1[i]>nums2[j])
j++;
else if(nums1[i]<nums2[j])
i++;
else {
if(res.empty()||res.back()!=nums1[i])
res.push_back(nums1[i]);
i++;j++;
}
}
return res;
}
利用STL的set_intersection()函数。
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> n1(nums1.begin(),nums1.end()),n2(nums2.begin(),nums2.end()),res;
set_intersection(n1.begin(),n1.end(),n2.begin(),n2.end(),inserter(res,res.begin()));
return vector<int>(res.begin(),res.end());
}
set并或交集运算
利用二分法做,对nums1排序。从nuns2中依次取出值用二分法看能否在nums1找到,能找到放入set中。
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
set<int> res;
for(auto a:nums2){
int left=0,right=nums1.size()-1;
while(left<=right){
int mid=left+(right-left)/2;
if(a<nums1[mid])
right=mid-1;
else if(a>nums1[mid])
left=mid+1;
else
{
res.insert(a);
break;
}
}
}
return vector<int>(res.begin(),res.end());
}
推荐阅读
-
【LeetCode】4. Median of Two Sorted Arrays
-
1.Merge Two Sorted Arrays. py/合并排序有序数列
-
LeetCode 4. 两个排序数组的中位数 Median of Two Sorted Arrays
-
算法练习(3):Median of Two Sorted Arrays
-
LeetCode算法系列:4、Median of Two Sorted Arrays
-
4. Median of Two Sorted Arrays
-
4. Median of Two Sorted Arrays
-
【leetcode】4. Median of Two Sorted Arrays
-
【leetcode阿里题库】4. Median of Two Sorted Arrays
-
Median of Two Sorted Arrays(C++)