2017-01-12 4 views
0

Ich mache einige Codingbat Herausforderungen für Java. In einer Herausforderung, sind Sie true zurück, wenn das angegebene Array in seinen ersten 2 oder letzten 2 Elementen von einemHinzufügen von Bedingungen innerhalb einer for-Schleife

Beispiel 3 ein 1 gefolgt hat:

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

Als solche habe ich die folgende:

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; 

Meine Frage ist, gibt es eine bessere Möglichkeit, die Bedingungen zu setzen? Ich mag es nicht zu überprüfen, ob die iterierenden Variablen kleiner als eine Konstante sind. Mein Code besteht für alle ihre Tests außer einem, aber ich fühle, dass es fehlerhaft/unordentlich ist. Wie kann ich effizient prüfen, ob die letzten zwei & ersten beiden Indizes eine 1 gefolgt von einer 3 haben, ohne zu prüfen, ob j>3 oder i<3?

Der Test, den es nicht besteht, ist mit dem folgenden Array: [1, 1, 1, 3, 1] Mein Code gibt True zurück, wenn der Test angeblich falsch ist.

+0

Kommentar Was für Ihren Test nicht bestanden das richtige Ergebnis ist? Es war mir aus der Problembeschreibung nicht klar. – shmosel

+0

Entschuldigung, danke, dass du darauf hingewiesen hast. Meine gibt wahr zurück, aber es sollte falsch sein. – BodyBingers

Antwort

1

Verwenden Sie keine Schleifen nicht bearbeitet, wie pro shmosels

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

@smossel 'arr [1] = 1' eek, ich hoffe nicht. Ernsthaft danke für den Kommentar –

Verwandte Themen