问候。
我在本系列中发布了 Codewars 挑战和我的思考过程。我尽可能使用 JS 和 Node 18。只是为了清楚起见,我正在合理使用它们。
问题表明我们需要找到其中一个:充满偶数的数组中的奇数,或者充满奇数的数组中的偶数。也就是说:
[0,2,4,6,8,97,14,14,-2]→ 97
[1,3,2,-3,-7,227,-183]→ 2
首先,我将通过查看数组的前 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; }
这正是我在未通过测试时的感受:
其次,我必须用谷歌搜索发生了什么。原来我没有考虑到负数会出现。所以我必须阅读 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中文网其他相关文章!