版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gease_Gg/article/details/83623205
背景
对于下面两个有序set,找到出他们的交集:
list1=[2,3,8,10,12]
list2=[3,10,12,22]
方法
1、计数器
对两个list分别遍历一遍;
#include <iostream>
using namespace std;
int main(){
int a[]={2,3,8,10,12};int alen=5;
int b[]={3,10,12,22};int blen=4;
int count[1000];
for(int i=0;i<alen;i++){
count[a[i]]=1;
}
for(int i=0;i<blen;i++){
if(count[b[i]]==1)
cout<<b[i]<<" ";
}
return 0;
}
结果:
复杂度:O(m+n)
2、双游标
这个过程有点像归并排序中的归并过程。
#include <iostream>
using namespace std;
int main(){
int a[]={2,3,8,10,12};int alen=5;
int b[]={3,10,12,22};int blen=4;
int aindex=0,bindex=0;
while(aindex<alen && bindex<blen){
int tmp1=a[aindex],tmp2=b[bindex];
if(tmp1<tmp2) aindex++;
else if(tmp1>tmp2) bindex++;
else{
cout<<tmp1<<" ";
aindex++;
bindex++;
}
}
return 0;
}
结果:
复杂度:O(min(m,n));