2017-01-12 7 views
0

私はjavaにいくつかのコードバットチャレンジをしています。 1つの課題では、あなたがその最初の2か最後の2つの要素で指定された配列は、3forループの中に条件を追加する

例に続いて1持っている場合はtrueを返すようにしている。このように

unlucky1([1, 3, 4, 5]) → true 
unlucky1([2, 1, 3, 4, 5]) → true 
unlucky1([1, 1, 1]) → false 

を、私は持っています以下:

for(int i=0, j=nums.length-1; i<nums.length-1; i++, j--) { 
    if((i<3&&nums[i]==1&&nums[i+1]==3)) { 
     return true; 
    } 
    else if(j>3&&nums[j]==3&&nums[j-1]==1) { 
     return true; 
    } 
} 
    return false; 

私の質問は、条件を設定する良い方法はありますか?反復変数が定数より小さいか大きいかをチェックするという考えは嫌いです。私のコードはすべてのテストを通過しますが、1つではありませんが、それは欠陥がある/汚れていると感じます。 j>3またはi<3のいずれかをチェックせずに最後の2つの&の最初の2つのインデックスに1が続いているかどうかを効率的にチェックするにはどうすればよいですか?

テストに合格しない場合は、次の配列を使用します。[1, 1, 1, 3, 1]テストコードがfalseの場合、マイコードはtrueを返します。 shmoselsあたりのように編集

+0

コメントあなたの失敗したテストのための正しい結果は何ですか?問題の説明から私には分かりませんでした。 – shmosel

+0

申し訳ありませんが、それを指摘していただきありがとうございます。鉱山は真実を返しますが、偽でなければなりません。 – BodyBingers

答えて

1

任意のループを使用しないでくださいは、

if (arr[0] == 1 && arr[1] == 3 || 
    arr[1] == 1 && arr[2] == 3 || 
    arr [arr.length -2] == 1 && arr[arr.length - 1] == 3) 
    return true; 
+0

'|| arr [1] = 1 && arr [2] == 3 ' – shmosel

+1

@shmosel 'arr [1] = 1' eek、私は望んでいません。本当にありがとうコメント –

関連する問題