求数组交集
2015-07-03 17:35
218 查看
注意:要求提供完整代码,如果可以编译运行酌情加分。
两个已排序的整型数组,求交集,最快算法
输入:两个已排序的整型数组(int a[m], b
)
输出:两个数组的交集
两个已排序的整型数组,求交集,最快算法
输入:两个已排序的整型数组(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; }
相关文章推荐
- php中的json_encode函数
- 直接拿来用!10款实用Android UI工具
- unicode方式保存文本
- PHP基本语法以及和Java的区别
- Razor内幕之解析
- php缓存技术(减少数据库服务器压力)
- 第七章
- yii2-更改默认显示的通用主页
- MYSQL导入导出
- html页面中js添加遮盖层实现等待效果
- 隐藏状态栏
- 用c++实现单向链表的创建,插入和删除
- linux关于bashrc与profile的区别(转)
- 关于 VS2013监视窗口的内存面板及寄存器面板
- C#.NET里面抽象类,接口,虚方法
- 《图形学》实验六:中点Bresenham算法画圆
- 自开发程序动态权限设置按钮
- 引导代码
- 深度学习——人工神经网络再掀研究热潮
- hadoop datanode 启动正常,但master无法识别(50030不显示datanode节点)