A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)
#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两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)相关推荐
- 设计一个算法求象棋这些棋子各代表哪些数字
设计一个算法求象棋这些棋子各代表哪些数字 [象棋算式] 兵 炮 马 卒 + 兵 炮 ...
- 在象棋算式中不同的棋子代表不同的数,设计一个算法求这些棋子个代表那些数字(回溯)
如下图的算式 兵 炮 马 卒+ 兵 炮 车 卒=车 卒 马 兵 卒 a b c d e 分别表示 兵 炮 马 卒 车 #include <stdio.h> #include <st ...
- 算法分析:在象棋算式里,不同的棋子代表不同的数,有以下算式,设计一个算法求这些棋子各代表哪些数字。
一.问题描述 二.源码
- 两个整数集合的交集 ———— 腾讯2014软件开发笔试题目
题目: A.B两个整数集合,设计一个算法求他们的交集,尽可能的高效. 思想: 位图标示数字 1 遍历 集合A,求出 最值,效率 1.5n ,计算最大值与最小值的差为LA.对B一样求出最值的差为LB. ...
- 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】
这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...
- 随机产生10个整数;设计一个算法找其中的最大的元素和最小的元素,并统计元素之间的比较次数
随机产生10个整数;设计一个算法找其中的最大的元素和最小的元素,并统计元素之间的比较次数 选择排序法 #include <iostream> #include <cstdlib> ...
- 【一元多项式算法】设一个一元多项式采用带头结点的单链表存储,所有结点 按照升幂方式链接。设计一个算法,求两个多项式 A 和 B 的乘积,结果多项式 C 存放在新辟的空间中。
[一元多项式算法]设一个一元多项式采用带头结点的单链表存储,所有结点 按照升幂方式链接.设计一个算法,求两个多项式 A 和 B 的乘积,结果多项式 C 存放在新辟的空间中. #include<s ...
- 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分
题目 有一个顺序表L,其元素为整形数据,设计一个算法,将L中的所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分 解答(天勤) /*************************** ...
- 数组分成两组差值最小 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 ...
最新文章
- 225.用队列实现栈
- 理解MapReduce哲学
- python 解析XML xml.dom
- 只腐蚀毛刺 腐蚀算法_摩托车油箱防腐蚀、油封安装、密封清洗经验分享
- DayDayUp:寒门女孩考入北大→换角度看待表达《感谢贫穷》—关于吃苦与穷~~~Python之wordcloud词云图可视化
- 调用DM FLDR JNI导出数据库文件
- php7 加的新特性积累
- 盗COOKIE之方法总结
- 【匈牙利算法】指引(jzoj 2319)
- [react] react中除了在构造函数中绑定this,还有别的方式吗?
- 使用网络进行项目托管
- linux tar压缩解压命令的详细解释
- python win32api教程_winapi-如何在python中使用win32 API?
- 微信小程序--获取已发布微信小游戏和小程序源码
- 在 js 中应用 订阅发布模式(subscrib/public)
- asp.net1028-餐厅自助点餐系统#毕业设计
- 稀疏编码(sparsecode)简单理解
- 【运维】第四节 Prometheus 配置完全手册
- 互联网上要创业 选好域名很重要
- Google Adsense公益广告的答案