O(m+n) 次的并、交、差大 IntSet
从我的问题
我已经完成了插入方法。
现在我尝试找出如何构建并集、交集和差集方法来对 2 个 IntSet 进行操作。
请注意,IntSet 的元素数量很大,我需要在 O(m+n) 时间内完成,其中 m 和 n 是两个 IntSet 的元素数量。
例如 IntSets
a = new IntSetExtra();
b = new IntSetExtra();
for(int i=0; i<300; i++){ a.insert(2*i); }
for(int i=0; i<300; i++){ a.insert(i); }
for(int i=20000; i<50000; i++){ b.insert(i); }
我该怎么做?
PS它可以使用归并排序吗?
编辑:
这是我的工会代码
public IntSetExtra union(IntSetExtra a){
//effect: return new IntSet that union between this and a;
IntSetExtra intSet = new IntSetExtra();
intSet.addAll(a);
for(int i=0; i<a.size(); i++){
if(!intSet.contains(a.get(i))){
intSet.insert(a.get(i));
}
}
return intSet;
}
From my question
Insert element to ArrayList with ascending order and no duplicate elements
I've done my insert method.
Now I try to find out how to build union, intersection, and difference methods to operate on 2 IntSets.
Notice that the number elements of IntSet is large and I need to do it in O(m+n) time where m and n are the number of elements of the two IntSets.
For example IntSets
a = new IntSetExtra();
b = new IntSetExtra();
for(int i=0; i<300; i++){ a.insert(2*i); }
for(int i=0; i<300; i++){ a.insert(i); }
for(int i=20000; i<50000; i++){ b.insert(i); }
How can I do it?
P.S. it can use mergesort?
edit:
Here is my union code
public IntSetExtra union(IntSetExtra a){
//effect: return new IntSet that union between this and a;
IntSetExtra intSet = new IntSetExtra();
intSet.addAll(a);
for(int i=0; i<a.size(); i++){
if(!intSet.contains(a.get(i))){
intSet.insert(a.get(i));
}
}
return intSet;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以只使用java集合的方法,例如
addAll(Collection)
、removeAll(Collection)
和retainAll(Collection)
。例如,两个集合的交集:
You may just use the methods of java collections such as
addAll(Collection)
,removeAll(Collection)
andretainAll(Collection)
.For example, the intersection of two sets: