【发布时间】:2021-12-28 03:55:20
【问题描述】:
我正在尝试解决这个 kata:
给你一个唯一整数 arr 的列表,以及两个整数 a 和 b。你的任务是找出 a 和 b 是否在 arr 中连续出现,并返回一个布尔值(如果 a 和 b 连续则为 True,否则为 False)。
保证 a 和 b 都存在于 arr 中。
测试示例:
consecutive([1, 3, 5, 7], 3, 7), false
consecutive([1, 3, 5, 7], 3, 1), true
consecutive([1, 6, 9, -3, 4, -78, 0], -3, 4), true
这是我目前所拥有的:
for (let i = 0; i < arr.length; i++) {
let index2 = arr.indexOf(b)
let index1 = arr.indexOf(a)
let diff = (index2) - (index1)
if (diff > 1) {
console.log(diff, 'false');
return false
} else {
console.log(diff, 'true');
return true
}
}
测试示例正在通过,但是当我提交解决方案时,其他一些测试没有通过。我看不到没有通过的测试,所以我坚持这一点。另外,我认为,如果 a 和 b 是相同的数字,那么如果我有
cons([4, 6, 4, 5, 6], 4, 4)
我的解决方案无法通过这个测试,那么我该如何改进呢?
【问题讨论】:
-
找到第一个数字,看看另一个数字是在它之前还是之后的索引中?
-
您在循环内多次使用 indexOf 来查找相同的值。这真是太无能了。如果您使用低效的方法,其中许多测试都会超时
-
@evolutionxbox 很棒的回复 XD 这是我遇到困难的实用方法!
-
@charlietfl 您的回复非常有效。下次您尝试帮助某人时,请告诉他们为什么他们的做法是错误的。
-
循环的关键是除了每次运行完全相同的代码之外没有做任何有成效的事情。因此,不是一次运行代码......它运行的次数与数组的长度一样多(或找到的匹配项)。在这些练习中,时间不是你的朋友
标签: javascript arrays