【发布时间】:2019-10-28 09:16:57
【问题描述】:
我最近在做一些 CodeWars 挑战,但我遇到了这个问题。
"给你一个包含整数的数组(长度至少为 3,但可能非常大)。数组要么完全由奇数组成,要么完全由偶数组成,除了单个整数 N . 编写一个将数组作为参数并返回这个“离群值”N的方法。
我查看了一些解决方案,这些解决方案已经在我们的网站上,但我想使用自己的方法解决问题。
我的代码中的主要问题似乎是它忽略了负数,即使我已经在 scala 中实现了 Math.abs() 方法。
如果您知道如何绕过它,那是非常受欢迎的。
非常感谢
object Parity {
var even = 0
var odd = 0
var result = 0
def findOutlier(integers: List[Int]): Int = {
for (y <- 0 until integers.length) {
if (Math.abs(integers(y)) % 2 == 0)
even += 1
else
odd += 1
}
if (even == 1) {
for (y <- 0 until integers.length) {
if (Math.abs(integers(y)) % 2 == 0)
result = integers(y)
}
} else {
for (y <- 0 until integers.length) {
if (Math.abs(integers(y)) % 2 != 0)
result = integers(y)
}
}
result
}
【问题讨论】:
-
您的代码的“主要问题”是使用了可变变量 (
vars) 以及您多次遍历整个集合的事实。非常低效且完全没有必要。 (并且您可能会尝试格式化代码以使其更具可读性。) -
代码有什么问题?它是否在特定输入上失败?如果是 - 请将其包含在问题中。还是会崩溃或超时?
-
对格式的主要抱怨是代码本身的风格不一致。一般来说,你应该根据你在结构中的深度来缩进行。查看 Scala 样式指南中有关缩进、嵌套和控制结构的条目,以获取有关如何更好地格式化的建议:docs.scala-lang.org/style
-
您可以点击问题下方的编辑按钮来稍微清理一下您的代码,并将您的测试添加到问题中。
-
提示:如果您正在寻找奇数或偶数,您可以从前三个数字开始计算。这就是为什么它的长度至少为 3