学習者:
私は指定された配列から形成することができる最大のチェーンを見つける必要がありプログラムに取り組んでいます。
例:
レッツ言う入力は次のようになります。
Arr[0] = 5
Arr[1] = 4
Arr[2] = 0
Arr[3] = 3
Arr[4] = 1
Arr[5] = 6
Arr[6] = 2
私は、配列のインデックスと対応する値を取る場合今、私は形成することができる可能最大鎖であります
値5とインデックス0 - >値6を持つインデックス5 - 値2を持つ>インデックス6 - 値0を持つ>インデックス2このサイクルが繰り返され、これは私はこの配列を使用して形成することができる私の最大鎖であるよう
ここに私のコードは次のとおりです。
public static int getMax(int[] nums) {
int result = 0;
for (int i = 0; i < nums.length; i++) {
List<Integer> list = new ArrayList<>();
list.add(i);
int temp = i;
while (true) {
int next = nums[temp];
if (list.contains(next)) {
break;
} else {
list.add(next);
temp = next;
}
}
result = Math.max(result, list.size());
}
return result;
}
私は上記のロジックが出ているが、私は私のコードでは、私は、同じタイプの複数の鎖を見つけようとしていますことがわかります。
それは私が私のリストを印刷する場合、それは、これらの値を有することを意味します。
[0, 5, 6, 2]
[1, 4]
[2, 0, 5, 6]
[3]
[4, 1]
[5, 6, 2, 0]
[6, 2, 0, 5]
ここでは0,5,6,2
チェーンが複数回繰り返され、上記のような不要な同様のループを避けるために、私のコードのパフォーマンスを改善する方法があります。
Sandeepa:
あなたは、その項目が既に配列に含まれている場合は、チェックすることによって、配列に取得した各値を置くことができます。あなた反復はあなたが満たされた配列の数を取得する場合ときに、あなたが使用して、その繰り返しを無視することができますcontinue