ホームページ >ウェブフロントエンド >jsチュートリアル >Codewars - パリティの外れ値を見つける
ご挨拶
このシリーズでは、Codewars の課題と私の思考プロセスを投稿しています。私は可能な限り JS と Node 18 を使用しています。明確にするために、私はそれらを公正に使用しています。
この問題は、偶数でいっぱいの配列内の奇数、または奇数でいっぱいの配列内の偶数のいずれかを見つける必要があることを示しています。つまり:
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2
まず、配列の最初の 3 つの要素を見て、どのような外れ値があるかを確認します。
その後行う必要があるのは、モジュロ 2 が異なる 1 つの数値に到達するまで配列を走査することだけです。上記アルゴリズムの 2 つのバリエーションがそれに応じて適用されます:
// 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++; }
パーツを組み立てると、次のようになります。
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; }
そして、これはまさにテストに合格しなかったときに私が感じたことです:
次に、何が起こったのかをグーグルで調べなければなりませんでした。負の数が表示されるとは考えていなかったことがわかりました。そこで、JS が負のモジュロをどのように扱うかを読まなければなりませんでした
3 番目のステップでは、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; }
まあまあのパフォーマンスですが、それほど読みやすいわけではありません。改善の余地は十分にあります。
気をつけてね。水を飲みましょう???
前
以上がCodewars - パリティの外れ値を見つけるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。