找到两个有序set中的交集

版权声明:本文为博主原创文章,未经博主允许不得转载。 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));

猜你喜欢

转载自blog.csdn.net/Gease_Gg/article/details/83623205