【恒生电子16年校招编程题】求两有序数组的交集并返回交集个数
2015-11-07 01:26
323 查看
上星期参加了恒生电子的笔试,来记录保存一下笔试编程题,以填充我枯竭的编程基础QAQ
题目大致意思:有两有序的数组aArray[] ,bArray[],已知他们的长度分别为aLength,bLength,求两数组的交集和交集个数
然后可以用C或者Java语言编程。
我选的C语言:
result[]存放交集数组。函数返回值为交集个数。
我的思路………:定义一动态数组total[],值为0,两个数组的值是这个动态数组的下标序号,遍历两个数组a[i],b[i],每次对应的total[i]的值+1。遍历完两个数组后寻找total[i]的值大于等于2的下标序号,这些数字也即两个数组的交集,然后把这些数字保存到result里面,同时求其个数。
复杂度为(aLength+bLength)。
然而并没有什么用……我不记得动态数组怎么用了……
注意:这两个代码我都木有编译过,有错请在评论中指出,大家一起学习交流呗~
谢谢临幸我这个渣渣的日志~我会慢慢地向上努力~
题目大致意思:有两有序的数组aArray[] ,bArray[],已知他们的长度分别为aLength,bLength,求两数组的交集和交集个数
然后可以用C或者Java语言编程。
我选的C语言:
int Intersection(int aArray[], int bArray[], int aLength, int bLength, int result[])【函数功能是题目给好的,不记得具体参数如何,大致是这样】
result[]存放交集数组。函数返回值为交集个数。
这是我童鞋思路:先将a数组与b数组逐个比较,如果a[i]大于等于b[j],若相等则存入result中,并a[i]与b[j+1]比较,若大于则直接a[i]与b[j+1]比较;如果a[i]小于b[j],则a[i+1]与b[j]比较; **复杂度为(aLength*bLength)**。 int Intersection(int aArray[], int bArray[], int aLength, int bLength, int result[]) { int aIndex,bIndex,i; i=0;//result数组的个数 bIndex=0; for(aIndex=0;aIndex<aLength;aIndex++) { for(;bIndex<bLength;bIndex++) { if(aArray[aIndex]>=bArray[bIndex]) { //如果a[i]大于等于b[j],若相等则存入result中,并a[i]与b[j+1]比较 if(aArray[aIndex]==bArray[bIndex]) result[i++]=aArray[aIndex]; //若大于则直接a[i]与b[j+1]比较; continue; } //如果a[i]小于b[j],则a[i+1]与b[j]比较; if(aArray[aIndex]<bArray[bIndex]) { break; } } } return i;//求交集个数 }
我的思路………:定义一动态数组total[],值为0,两个数组的值是这个动态数组的下标序号,遍历两个数组a[i],b[i],每次对应的total[i]的值+1。遍历完两个数组后寻找total[i]的值大于等于2的下标序号,这些数字也即两个数组的交集,然后把这些数字保存到result里面,同时求其个数。
复杂度为(aLength+bLength)。
然而并没有什么用……我不记得动态数组怎么用了……
int Intersection(int aArray[], int bArray[], int aLength, int bLength, int result[]) { int *total=0;//为动态数组赋值0 int num=1000;//设置动态数组有1000 int number=0;//number存放交集个数 // 动态数组需要申请内存块 total= (int *)malloc(sizeof(int)*num); if (total == 0) // 内存申请失败,退出 { exit(0); } int i; for(i=0;i<aLength;i++) { total[aArray[i]]+=1; } for(i=0;i<bLength;i++) { total[bArray[i]]+=1; } for(i=0;i<max(aArray[aLength-1],bArray[bLength-1]);i++) { if(total[i]>=2)result[number++]=i; } return number; free(total);//最后别忘了释放内存空间 }
注意:这两个代码我都木有编译过,有错请在评论中指出,大家一起学习交流呗~
谢谢临幸我这个渣渣的日志~我会慢慢地向上努力~
相关文章推荐
- 关于C#类中重写ToString方法和PHP类中__tostring()方法的比较
- c++重载运算符注意
- Java之随机数
- 1106 1014 C语言文法定义与C程序的推导过程 冒泡程序语法树
- 怎样增加phpmyadmin导入文件上限
- Matlab畫地圖
- 益智趣味小游戏之三子棋
- TITLE: UVA 11292 Dragon of Loowater
- java入门程序100例学习笔记(008黑色星期五)
- Day2(11.1):相关代码
- java 工厂模式 详解
- 三种光照模型的计算
- kaptcha 验证码在spring mvc 中的使用
- win10-jdk环境配置
- C#日期与时间
- 嵌入式编程
- JDK1.5新特性
- eclipse for android安装过程
- Spring记录 - Jackson使用上的注意点Boolean字段
- asp.net fileupload控件上传图片并预览图片