1

私の質問から

要素を昇順で重複要素なしでArrayListに挿入します

挿入方法を実行しました。

ここで、2 つの IntSet を操作するユニオン、インターセクション、および差分メソッドを作成する方法を見つけようとしています。

IntSet の要素数が多く、O(m+n)時間で実行する必要があることに注意してください。ここで、m と n は 2 つの 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;
}
4

1 に答える 1

2

addAll(Collection)、 、removeAll(Collection)などの Java コレクションのメソッドをそのまま使用できますretainAll(Collection)

たとえば、2 つの集合の交点:

public Set<V> intersection(Set<? extends V> a, Set<? extends V> b) {
  // you may swap a and b, so a would contain the smaller collection
  Set<V> result = new HashSet<V>(a);
  result.retainAll(b);
  return result;
}
于 2010-08-30T15:48:35.987 に答える