您的位置:首页 > 其它

求数组交集

2015-07-03 17:35 218 查看
注意:要求提供完整代码,如果可以编译运行酌情加分。

两个已排序的整型数组,求交集,最快算法

输入:两个已排序的整型数组(int a[m], b


输出:两个数组的交集

#include <iostream>
#include <vector>
using namespace std;

/*递归二分法,返回数组中与目标值相等或小一号的下表*/
int search_dichotomy(int a[], int index_s, int index_e, int obj)
{
int index_m = 0;
int k = 0;
cout << "obj:" << obj << " s:" << index_s << " e:" << index_e << endl;
if ((index_e - index_s) == 1)
return index_s;
index_m = (index_s + index_e)/2;
if (a[index_m] == obj)
return index_m;
else if (a[index_m] > obj)
k = search_dichotomy(a, index_s, index_m, obj); /*返回结果必须要接收回来*/
else if (a[index_m] < obj)
k = search_dichotomy(a, index_m, index_e, obj);
return k;
}

/*求交集函数*/
vector<int> intersect_array(int a[], int len_a, int b[], int len_b)
{
vector<int> int_vec;
int index_s = 0;
int index_e = len_b-1;
int k = 0;
for (int i=0; i<len_a; i++)
{
int obj = a[i];
if ((obj == b[index_s]) || (obj == b[index_e]))
{
int_vec.push_back(obj);
}
else if ((obj > b[index_s]) && (obj < b[index_e]))
{
k = search_dichotomy(b, index_s, index_e, obj);
if (b[k] == obj)
int_vec.push_back(a[i]);
index_s = k+1;  /*从下一个值开始*/
}
}
return int_vec;
}

int main()
{
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int b[5] = {2,4,6,8,10};
int len_a = sizeof(a)/sizeof(int);
int len_b = sizeof(b)/sizeof(int);
vector<int> int_vec = intersect_array(b, len_b, a, len_a);
vector<int>::iterator iter = int_vec.begin();
for (; iter!=int_vec.end(); iter++)
{
cout << *iter << ",";
}
cout << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: