Salam.
Saya menyiarkan cabaran Codewars dan proses pemikiran saya dalam siri ini. Saya menggunakan JS dan Node 18 apabila boleh. Hanya demi kejelasan, saya menggunakan mereka secara adil.
Masalahnya mengatakan kita perlu mencari salah satu daripada ini: nombor ganjil dalam tatasusunan yang penuh dengan nombor genap, atau nombor genap dalam tatasusunan yang penuh dengan nombor ganjil. Maksudnya:
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2
Mula-mula, saya akan menyemak jenis outlier dengan melihat 3 elemen pertama tatasusunan:
Apa yang perlu kita lakukan selepas itu ialah melintasi tatasusunan sehingga kita mencapai satu nombor yang modulo-2nya berbeza. Dua variasi algoritma tersebut digunakan dengan sewajarnya:
// 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++; }
Memasang bahagian bersama-sama kita berakhir dengan:
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; }
Dan inilah yang saya rasakan apabila ia tidak lulus ujian:
Kedua, saya terpaksa google apa yang berlaku. Ternyata saya tidak menganggap nombor negatif boleh muncul. Jadi saya terpaksa membaca cara JS menangani modulo negatif
Untuk langkah ketiga, gunakan 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; }
Prestasi yang baik, walaupun tidak begitu boleh dibaca. Ia mempunyai banyak ruang untuk penambahbaikan.
Jaga diri. Minum air ???.
Sebelumnya
Atas ialah kandungan terperinci Codewars - Cari The Parity Outlier. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!