#include<iostream>
using namespace std;
/*
1)先使用快速排序,使得两个数组有序;
2)然后利用二分查找的方法,在数组B中查找;
3)其中,注意在数组B中,使用二分查找的起点,是根据上次查找的结果开确定的;这样可以进一步提高速度;
*/
int Sort(int array[],int low,int high)
{int temp=array[low];int pos=low;while(low<high){while(array[high]>temp && high>low)high--;if(high>low)array[low]=array[high];while(array[low]<temp && high>low)low++;if(low<high)array[high]=array[low];}array[low]=temp;return low;
}
void QuickSort(int array[],int low,int high,int len)
{if(low<high){int mid=Sort(array,low,high);QuickSort(array,low,mid-1,len);QuickSort(array,mid+1,high,len);}
}int BinarySearch(int array[],int len,int start,int key)
{int pos=-1;int low=start;int high=len-1;int mid=0;while(low<=high){mid=(low+high)/2;if(key>array[mid])low=mid+1;else if(key<array[mid])high=mid-1;else if(key==array[mid]) {pos=mid;break;}}return pos;
}
void Output(int array_A[],int array_B[],int len_A,int len_B)
{QuickSort(array_A,0,len_A-1,len_A);QuickSort(array_B,0,len_B-1,len_B);int i=0,j=0,current=0;//current 记录当前查找的位置;int*array_C =new int [len_A];int count=0;for(i=0;i<len_A;i++){j=BinarySearch(array_B,len_B,current,array_A[i]);if(j==-1){continue;}else{array_C[count]=array_A[i];count++;current=j+1;}}if(array_C!=NULL){for(i=0;i<count;i++){cout<<array_C[i]<<" ";}cout<<endl;}delete []array_C;array_C=NULL;
}int main()
{int array_A[10]={5,1,7,3,9,0,45,8,12,11};int array_B[10]={15,1,17,3,23,0,45,33,12,11};int len_A=10;int len_B=10;Output(array_A,array_B,len_A,len_B);return 0;
}

A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)相关推荐

  1. 设计一个算法求象棋这些棋子各代表哪些数字

    设计一个算法求象棋这些棋子各代表哪些数字 [象棋算式]                                兵      炮       马       卒 +      兵      炮  ...

  2. 在象棋算式中不同的棋子代表不同的数,设计一个算法求这些棋子个代表那些数字(回溯)

    如下图的算式 兵 炮 马 卒+ 兵 炮 车 卒=车 卒 马 兵 卒 a b c d e  分别表示 兵 炮 马 卒 车 #include <stdio.h> #include <st ...

  3. 算法分析:在象棋算式里,不同的棋子代表不同的数,有以下算式,设计一个算法求这些棋子各代表哪些数字。

    一.问题描述 二.源码

  4. 两个整数集合的交集 ———— 腾讯2014软件开发笔试题目

    题目: A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效. 思想: 位图标示数字 1 遍历 集合A,求出 最值,效率 1.5n ,计算最大值与最小值的差为LA.对B一样求出最值的差为LB. ...

  5. 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】

    这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...

  6. 随机产生10个整数;设计一个算法找其中的最大的元素和最小的元素,并统计元素之间的比较次数

    随机产生10个整数;设计一个算法找其中的最大的元素和最小的元素,并统计元素之间的比较次数 选择排序法 #include <iostream> #include <cstdlib> ...

  7. 【一元多项式算法】设一个一元多项式采用带头结点的单链表存储,所有结点 按照升幂方式链接。设计一个算法,求两个多项式 A 和 B 的乘积,结果多项式 C 存放在新辟的空间中。

    [一元多项式算法]设一个一元多项式采用带头结点的单链表存储,所有结点 按照升幂方式链接.设计一个算法,求两个多项式 A 和 B 的乘积,结果多项式 C 存放在新辟的空间中. #include<s ...

  8. 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分

    题目 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分 解答(天勤) /*************************** ...

  9. 数组分成两组差值最小 python_数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0x100,元素个数也是大于0, 小于100 。...

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

最新文章

  1. 225.用队列实现栈
  2. 理解MapReduce哲学
  3. python 解析XML xml.dom
  4. 只腐蚀毛刺 腐蚀算法_摩托车油箱防腐蚀、油封安装、密封清洗经验分享
  5. DayDayUp:寒门女孩考入北大→换角度看待表达《感谢贫穷》—关于吃苦与穷~~~Python之wordcloud词云图可视化
  6. 调用DM FLDR JNI导出数据库文件
  7. php7 加的新特性积累
  8. 盗COOKIE之方法总结
  9. 【匈牙利算法】指引(jzoj 2319)
  10. [react] react中除了在构造函数中绑定this,还有别的方式吗?
  11. 使用网络进行项目托管
  12. linux tar压缩解压命令的详细解释
  13. python win32api教程_winapi-如何在python中使用win32 API?
  14. 微信小程序--获取已发布微信小游戏和小程序源码
  15. 在 js 中应用 订阅发布模式(subscrib/public)
  16. asp.net1028-餐厅自助点餐系统#毕业设计
  17. 稀疏编码(sparsecode)简单理解
  18. 【运维】第四节 Prometheus 配置完全手册
  19. 互联网上要创业 选好域名很重要
  20. Google Adsense公益广告的答案

热门文章

  1. ubuntu 网络连接图标灰色处理
  2. 指令集与左岸芯慧正式启动“中国农业智能操作系统”共建
  3. 微服务 撮合引擎 撮合微服务搭建 案例 4
  4. 秋裤传奇html5,匈牙利门神不服老 基拉利,一条秋裤写传奇
  5. 遥望星空WINDOWS证书生成导出加解密工具
  6. 豌豆淘谈护肤:豌豆淘讲解肤质分类,不了解肤质谈何护肤?
  7. Prometheus监控系统存储容量优化攻略,让你的数据安心保存!
  8. extmail mysql数据库 重启_extmail数据库dspam表修复
  9. DHU 25繁殖问题
  10. 学习ASP.NET + MVC(四)