首页 > web前端 > js教程 > Codewars - 查找奇偶校验异常值

Codewars - 查找奇偶校验异常值

Mary-Kate Olsen
发布: 2025-01-05 19:30:47
原创
729 人浏览过

问候。

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 2(ximod2)=0sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 0 0≤i≤ 2 Σ(x mod2)=0
  • 1 个奇数元素 =>
    Σ0 2(ximod2)=1sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 1 0≤i≤ 2 Σ(x mod2)=1
  • 2 个奇数元素 =>
    Σ0 2(ximod2)=2sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 2 0≤i≤ 2 Σ(x mod2)=2
  • 3 个奇数元素 =>
    Σ0 2(ximod2)=3sum_{substack{0leq ileq 2}} ( x_{i}mod 2 ) = 3 0≤i≤ 2 Σ(x mod2)=3

之后我们需要做的就是遍历数组,直到找到模 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 如何处理负模


第三步,使用 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板