社区
数据结构与算法
帖子详情
两个整型数组的交集
chin_chen
2009-03-05 12:10:38
如题,删除两个整型数组A和B的交集.
有啥办法没?要求复杂度最优。
...全文
154
5
打赏
收藏
两个整型数组的交集
如题,删除两个整型数组A和B的交集. 有啥办法没?要求复杂度最优。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chin_chen
2009-03-05
打赏
举报
回复
[Quote=引用 1 楼 litaoye 的回复:]
如果不考虑空间,用hash可以达到O(A+B)
否则的话,可以先对AB分别排序,然后用归并排序的方法,应该可以达到A*logA + B*logB + O(A+B)
[/Quote]
怎么建hash啊?是建一个数组,把B所有元素按大小放进在数组里面对应的位置,然后对A的元素一个个的找,找到的话就删掉是吧?是这样么?
绿色夹克衫
2009-03-05
打赏
举报
回复
如果不考虑空间,用hash可以达到O(A+B)
否则的话,可以先对AB分别排序,然后用归并排序的方法,应该可以达到A*logA + B*logB + O(A+B)
大王派我去巡山
2009-03-05
打赏
举报
回复
[Quote=引用 2 楼 ppass 的回复:]
我给出一个另类的思路,内存开销可能会大,但速度绝对快.
1. 找出2个数组的最大值nMax.
2. 定义一个桶array,容量为nMax.并全部初始化为0.
3. 遍历一遍数组A,将array[a[i]]的值=1; //不是++,因为A中可能也有重复的.
4. 遍历一遍数组B,将array[b[i]]的值++;
5. 遍历一遍数组array,将>1的值统统删除. //不是=2,因为B中有重复的,值-1,就是重复的次数.
看这个帖子,昨天刚刚讨论过的.
http://topic.csdn.net/u/20090304/…
[/Quote]
这其实就是1L说的Hash的办法
ppass
2009-03-05
打赏
举报
回复
我给出一个另类的思路,内存开销可能会大,但速度绝对快.
1. 找出2个数组的最大值nMax.
2. 定义一个桶array,容量为nMax.并全部初始化为0.
3. 遍历一遍数组A,将array[a[i]]的值=1; //不是++,因为A中可能也有重复的.
4. 遍历一遍数组B,将array[b[i]]的值++;
5. 遍历一遍数组array,将>1的值统统删除. //不是=2,因为B中有重复的,值-1,就是重复的次数.
看这个帖子,昨天刚刚讨论过的.
http://topic.csdn.net/u/20090304/17/10ee708f-6f9a-4100-b5fc-885fa8aca3a7.html
绿色夹克衫
2009-03-05
打赏
举报
回复
就是这样,如果个数还有要求的话,可以加一个计数,比如A里有2个10,B里有5个10,删除后B还需要保留3个10的话
也可以用比较现成的hashtable(C不太熟,也许不叫这个),.net里面叫做Dictionary
[Quote=引用 4 楼 chin_chen 的回复:]
引用 1 楼 litaoye 的回复:
如果不考虑空间,用hash可以达到O(A+B)
否则的话,可以先对AB分别排序,然后用归并排序的方法,应该可以达到A*logA + B*logB + O(A+B)
怎么建hash啊?是建一个数组,把B所有元素按大小放进在数组里面对应的位置,然后对A的元素一个个的找,找到的话就删掉是吧?是这样么?
[/Quote]
运算符重载题目合集(
整型
数组
交集
、矩阵加法、分数加法)
包含以下题目极其C++求解代码: 1.【题目】建一个类Set,重载运算符*,实现集合(用
数组
表示)的交(∩)运算。集合中的元素不能相同。
两个
集合的交仅包含
两个
集合中共同存在的。 2.【题目】建立一个类Matrix实现对M行,N列矩阵的加法运算。 3.【题目】分数相加,
两个
分数分别是1/5和7/20,它们相加后得11/20。方法是先求出
两个
分数分母的最小公倍数,通分后,再求
两个
分子的和,最后约简结果分数的分子和分母(如果
两个
分数相加的结果是4/8,则必须将其约简成最简分数的形式1/2),即用分子分母的最大公约数分别除分子和分母。求m、n最大公约数的一种方法为:将m、n较小的一个数赋给变量k,然后分别用{k,k-1,k-2,…,1} 中的数(递减)去除m和n,第一个能把m和n同时除尽的数就是m和n的最大公约数。假定m、n的最大公约数是v,则它们的最小公倍数是m*n/v。
义一个整数集合类integerSet。这种类型的对象可以存储10个20~80之间的整数,即他的内部有一个
整型
数组
存储数据。编程:
义一个整数集合类integerSet。这种类型的对象可以存储10个20~80之间的整数,即他的内部有一个
整型
数组
存储数据。编程: (1) 判断
两个
inergerSet类对象S1和S2是否相等。提示:集合相等的前提是所有元素相等。 (2) 输出
两个
集合对象的
交集
。 (3) 输出
两个
集合对象的并集。 (4) 将一个
整型
数据插入到一个集合对象中。 (5) 从一个集合中删除某一个元素。
二路归并法求解
两个
整型
数组
的
交集
1.问题 已知
两个
从小到大排好序的
整型
数组
A[8]={1,3,6,8,9,10,12,15};B[6]={1,6,8,13,15,18};则这
两个
整型
数组
交集
为{1,6,8,15}。 2.当
两个
数组
的长度相当时,可以采用二路归并法来进行求解
交集
二路归并法思路:对于
数组
A,B分别以i,j从头遍历
数组
。如果当前位置的A[i]等于B[j],则这
两个
数是
两个
数组
的一个
交集
,记录下来并继续遍历;如果
java中
两个
整型
数组
求
交集
_java求
两个
数组
交集
本篇文章帮大家学习java求
两个
数组
交集
,包含了java求
两个
数组
交集
使用方法、操作技巧、实例演示和注意事项,有一定的学习价值,大家可以用来参考。以下实例演示了如何使用 removeAll () 方法来删除包含在另外一个
数组
中的
数组
元素:importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]ar...
两个
有序
整型
数组
的
交集
题目:如何计算
两个
有序
整型
数组
的
交集
? 例如,
两个
含有 n 个元素的有序(非降序)
整型
数组
a 和 b(
数组
a 和 b 中都没有重复元素),求出其共同元素。 int a[ ] = {1, 2, 3, 4, 5}; int b[ ] = {1, 3, 5, 7, 9}; 那么它们的
交集
为{1, 3, 5}。计算
数组
交集
可以采用很多种方法,但
数组
的相对大小一般会影响算法的效率,所以需要根据
两个
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章