ホームページ >ウェブフロントエンド >jsチュートリアル >Codewars - パリティの外れ値を見つける

Codewars - パリティの外れ値を見つける

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-05 19:30:47724ブラウズ

ご挨拶

Codewars - Find The Parity Outlier

このシリーズでは、Codewars の課題と私の思考プロセスを投稿しています。私は可能な限り JS と Node 18 を使用しています。明確にするために、私はそれらを公正に使用しています。

この問題は、偶数でいっぱいの配列内の奇数、または奇数でいっぱいの配列内の偶数のいずれかを見つける必要があることを示しています。つまり:
[ 0, 2, 4, 6, 8, 97, 14, 14, -2 ] -> 97
[ 1, 3, 2, -3, -7, 227, -183 ] -> 2


まず、配列の最初の 3 つの要素を見て、どのような外れ値があるかを確認します。

  • 3 つの偶数要素 =>
    0 i2(xd 2)=0sum_{サブスタック{0leq ileq 2}} ( x_{i}mod 2 ) = 0 0≤i≤ 2 (x mod2)=0
  • 1 個の奇数要素 =>
    0 i2(xd 2)=1sum_{サブスタック{0leq ileq 2}} ( x_{i}mod 2 ) = 1 0≤i≤ 2 (x mod2)=1
  • 2 つの奇数要素 =>
    0 i2(xd 2)=2sum_{サブスタック{0leq ileq 2}} ( x_{i}mod 2 ) = 2 0≤i≤ 2 (x mod2)=2
  • 3 つの奇数要素 =>
    0 i2(xd 2)=3sum_{サブスタック{0leq ileq 2}} ( x_{i}mod 2 ) = 3 0≤i≤ 2 (x mod2)=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;
}

そして、これはまさにテストに合格しなかったときに私が感じたことです:

Codewars - Find The Parity Outlier


次に、何が起こったのかをグーグルで調べなければなりませんでした。負の数が表示されるとは考えていなかったことがわかりました。そこで、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。