Heim >Web-Frontend >js-Tutorial >Codewars – Finden Sie den Paritätsausreißer
Anreden.
Ich poste in dieser Serie Codewars-Herausforderungen und meinen Denkprozess. Ich verwende wann immer möglich JS und Node 18. Nur der Klarheit halber nutze ich sie fair.
Das Problem besagt, dass wir eines davon finden müssen: die ungerade Zahl in einem Array voller gerader Zahlen oder die gerade Zahl in einem Array voller ungerader Zahlen. Das heißt:
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2
Zuerst überprüfe ich, was für ein Ausreißer es ist, indem ich mir die ersten drei Elemente des Arrays ansehe:
Alles, was wir danach noch tun müssen, ist das Array zu durchlaufen, bis wir die eine Zahl treffen, deren Modulo-2 unterschiedlich ist. Zwei Variationen dieses Algorithmus werden entsprechend angewendet:
// odd number in even array while (number % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } // even number in odd array while (number % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; }
Wenn wir die Teile zusammenbauen, erhalten wir am Ende:
function findOutlier(integers){ let counter = 0; let number = 0; let a = integers[0] % 2; let b = integers[1] % 2; let c = integers[2] % 2; if (a + b + c <= 1){ number = integers[0]; while (number % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } } else { number = integers[0]; while (number % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; } } return number; }
Und genau so habe ich mich gefühlt, als es die Tests nicht bestanden hat:
Zweitens musste ich googeln, was passiert ist. Es stellte sich heraus, dass ich nicht damit gerechnet hatte, dass negative Zahlen auftreten könnten. Und so musste ich lesen, wie JS mit negativen Modulen umgeht
Verwenden Sie für den dritten Schritt Math.abs():
function findOutlier(integers){ let counter = 0; let number = 0; let a = Math.abs(integers[0] % 2); let b = Math.abs(integers[1] % 2); let c = Math.abs(integers[2] % 2); if (a + b + c <= 1){ number = integers[0]; while (Math.abs(number) % 2 == 0 && counter < integers.length){ number = integers[counter]; counter++; } } else { number = integers[0]; while (Math.abs(number) % 2 == 1 && counter < integers.length){ number = integers[counter]; counter++; } } return number; }
Gute Leistung, allerdings nicht so gut lesbar. Es gibt reichlich Raum für Verbesserungen.
Pass auf dich auf. Wasser trinken???.
Zurück
Das obige ist der detaillierte Inhalt vonCodewars – Finden Sie den Paritätsausreißer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!