2016-04-13 13 views
2

私は基本的に整数配列があり、各インデックスの値が別のインデックスを指しているところで、コードチャレンジをしています。配列内のループの長さは、配列のインデックス0から始めることが条件です。整数配列内のループの長さを見つける

:numbers = {1,3,0,1};インデックス0は1で、インデックス1が3になります。これは1につながり、インデックス1に戻ります。したがって、長さ2のループが作成されます。

私の問題は、 3/5のテストケースを渡すために、コード内でエラーを引き起こす可能性のある弱点を見つけることができません。私は期待されていたことや、「Test Case n Failed!」以外の情報は教えていない。ここで

は私のコードです:

public static int answer(int[] numbers) { 
    List<Integer> valuesUsed = new ArrayList<Integer>(); 
    int nextValue, currentValue = numbers[0]; 
    do { 
     valuesUsed.add(currentValue); 
     currentValue = (nextValue = numbers[currentValue]); 
    } while (!valuesUsed.contains(currentValue)); 
    return valuesUsed.size(); 
} 

EDITS:

  • 配列のサイズが、私が受け取ったテストケースは{あるどこでも2〜5000

  • になります1 、3、0、1}、{1,0}、{1,2,1}、私のコードはすべて正しく渡されます。

+0

を試してみてください。空の配列の場合にも、0を返す必要があります。 –

+0

エラーチェックが追加されました。私が入手したreadmeは、配列のサイズが2から5000までの範囲であると言っていました。その情報を忘れて元の投稿に編集します。 –

+0

{1,2,3,4,4}の返品について教えてください。私は1が答えだと仮定しますが、あなたのコードから4を得ました。 – hk6279

答えて

1

私はそれが唯一のエラーだかはわからないが、あなたはvaluesUsed0を追加するのを忘れ。これが最初に遭遇するインデックスなので、ループの前にListに追加する必要があります。

EDIT:

訂正:

あなたはループを閉じるときに遭遇したインデックスの一部がループの一部ではないので、valuesUsed.size()を返すことは、間違っています。

valuesUsed.size()-valuesUsed.indexOf(currentValue)を返す必要があります。

たとえば、配列が{1,3,1,4,2}の場合、ループは1-> 3-> 4-> 2-> 1であり、ループの長さは4です(最初の要素はカウントされません)。

+0

Hesはdo whileループを使用しています。 –

+0

配列内に値2がないため、0はループ内に含まれません。開始する最初の値は1です。これはインデックス0の値で、valuesUsedに追加されます。 –

+0

@Kyle配列が{1,0}の場合はどうなりますか?それはループではありませんか? – Eran

0

は、おそらくあなたは、配列の外にあるインデックス値ポイントの場合と同様に、エラーチェックを必要とするこの

public static int answer(int[] numbers) { 
    List<Integer> valuesUsed = new ArrayList<Integer>(); 
    int currentValue = 0; 
    int nextValue =0; 
    do { 
     currentValue = nextValue; 
     nextValue = numbers[currentValue]; 
     valuesUsed.add(nextValue); 

    } while (!valuesUsed.contains(currentValue)); 
    return valuesUsed.size(); 
} 
+0

nextValueを初期化するまで、それは関係なく動作しません。 –

+0

私はnextValue currentValue = 0 – Assen

+0

いいえ、currentValueは0に初期化されます。nextValueは初期化されません。 –

関連する問題