)2つのリストが等しい場所まで、すばやくスマートな方法を探しています。つまり、共通の要素を含む最小のパーティションを2つ以上のリストの同じ順序で見つける必要があります。 それは少し混乱に聞こえるが、ここで私が達成したいものの一例であるかもしれません。2つ以上のリストの共通要素のJava最小パーティション(
List 1: A, B, C, L, M Z
List 2: A, B, C, K, F
Output -> List 3: A, B, C
私は大の入力と、私が来ているすべてのソリューションと呼ばれるべき再帰的方法でこれを使用する必要がありますとにかく遅すぎる。事前にあなたの答えのための
おかげ
EDIT: 不明確であることのために私を許しなさい。これは私の最初の質問であり、英語は母国語ではありません。
より良い方法で問題を説明してください。リストの最初の要素から始まる2つ以上のリストの共通部分を見つける必要があります。要素は同じ順序でなければならないので、それは正確には交差点ではなく、よりパーティションに似ていることに注意してください。
"再帰的な"ことは、何度も実行される再帰的なメソッドにこれを含める必要があると言っていたので、多くの時間を失わないようにできるだけ早く解決したいと思います。私は私自身の解決策を考え出した削除されているような答えに取り組ん
:
List<String> list1 = new ArrayList<>(Arrays.asList("ciao", "come"));
List<String> list2 = new ArrayList<>(Arrays.asList("ciao", "come", "va"));
List<String> list3 = new ArrayList<>(Arrays.asList("ciao", "come", "va", "?", "tutto", "ok"));
List<List<String>> allLists = new ArrayList<>();
allLists.addAll(Arrays.asList(list1, list2, list3));
int min = Integer.MAX_VALUE;
int listIndex = 0;
for(List<String> list : allLists){
if(min > list.size()){
min = list.size();
listIndex = allLists.indexOf(list);
}
}
int index = 0;
boolean same = true;
while(index<min && same == true) {
String element = allLists.get(listIndex).get(index);
for(List<String> list : allLists){
if(!list.get(index).equals(element)){
same = false;
break;
}
element = allLists.get(listIndex).get(index);
}
if(same == true) ++index;
}
System.out.println("OUTPUT:" + allLists.get(listIndex).subList(0, index));
----> Output: ciao, come
EDIT2:
ものgarnfulソリューションは、魔法のように動作し、私はそれを見つけます私よりもはっきり分かります。おかげでみんな
質問は何ですか? – Li357
この問題を解決する良い方法は何ですか? –
アルゴリズムは再帰的でなければなりませんか? – Keiwan