私は、(1,2)(3,4)のような要素のペアのリストがあり、重複が存在しない場合、ペア(p、q) p!= q。 単純なコードを使用してこの要素からセットを作成する方法(単純な方法でコードを書くことができない限り、私は分離した集合や共用体のようなデータ構造を使用するつもりはありません。 例:(1,2)(2,4)(5,6)(4,7)(3,5)は、出力する必要があります。 {1,2,4,7}および{3,5,6}Javaの要素ペアのリストからセットを形成するコード
List<Set<Integer>> list = new ArrayList<>();
for(String s : pairs){
String[] values = s.split(" ");
Integer val1 = Integer.parseInt(values[0]);
Integer val2 = Integer.parseInt(values[1]);
Set<Integer> pairSet = new HashSet<>();
pairSet.add(val1);
pairSet.add(val2);
boolean exists = false;
for(Set<Integer> set : list){
if(set.contains(val1) || set.contains(val2)) {
set.addAll(pairSet);
exists = true;
break;
}
}
if(!exists)
list.add(pairSet);
}
これは間違ったアプローチです。シーケンス(1 2)(3 4)と(2 3)を得ると、出力は{1,2,3}と{3,4}になります。
これは、セットのリストが {1,2}、次に{3,4}のように作成され、次にペア(2 3)が来るときに2つのセットをマージしないために発生します。
//loop -> s1 = find val1
//loop -> s2 = find val2
if s1 != null and s2 != null //merge s1 and s2
if(s1 == null && s2 != null) //add val1 and val2 to s2
if(s1 != null && s2 == null) //add val1 and val2 to s1
if(both null) create a new set of val1 and val2
あまりにも多くのループと条件:
Iが第1の値をチェックするためのコードを書くことができ、任意のセット内に存在しているがS1と他の値のために、同じマージ次にS2を言うと言います。より単純なソリューションですか?
はSO宿題解決リソースではありません。ここでは、いくつかの特定の問題を持っているあなたのコードの試行に来てください –
私は確信していませんが、おそらくいくつかを書くことは、トリックを行うだろう... – GhostCat
私は本当に全体のコードを探していないですが、JavaのコアAPI私は、問題を解決するために新しいデータ構造を作成したくないので、共通のAPIを使って分かりやすくすることができません。 –