以下代码中的错误是啥?没有得到预期的输出
Posted
技术标签:
【中文标题】以下代码中的错误是啥?没有得到预期的输出【英文标题】:Whats the error in below code ? not getting expected output以下代码中的错误是什么?没有得到预期的输出 【发布时间】:2021-06-04 07:45:38 【问题描述】:给定一个整数数组和一个整数 k,找出数组中是否有两个不同的索引 i 和 j 使得 nums[i] = nums[j] 并且 i 和 j 之间的绝对差最多为 k .
示例 1: 输入:nums = [1,2,3,1], k = 3 输出:真
示例 2: 输入:nums = [1,0,1,1], k = 1 输出:真
object Solution
def containsNearbyDuplicate(nums: Array[Int], k: Int): Boolean =
for (i <- 0 until nums.length - 2)
for (j <- i until nums.length - 1)
if (nums(i) == nums(j) && (j - i == k)) return true
return false
您的意见 [1,2,3,1] 3 输出 错误的 预期的 真的
【问题讨论】:
您没有计算j
和i
之间的绝对差;这种差异也不需要等于k
,最多k
这里是算法的功能版本:scastie.scala-lang.org/BalmungSan/hFziNk8YToS7ZgQcr0887w/1
【参考方案1】:
我不认为您正在评估内部列表的完整长度。
正如所写,j
永远不会等于 3
。
我认为如果你让你的内部循环读取for (j <- i until nums.length)
应该可以工作。
可能也想修复外循环。否则,i
永远不会达到存储在数组中的值 3。
使用 until 将排除,因此如果您使用长度为 3 的 i <- 0 until nums.length -1
,则 i
的值将是 0、1、2 和 end。
如果您想减去 - 1,因为它对您来说更容易或更有意义,那么您可能想要使用 i <- 0 to nums.length - 1
。
否则,i <-0 until nums.length
将导致 i
的值在迭代 for 循环时为 0、1、2、3。
希望对您有所帮助。
【讨论】:
【参考方案2】:这是功能性的,效率为 O(n) 而不是 O(n^2),并修复了一个错误 (i != j
)。测试时你也应该总是有一个否定的情况;)
import math.min, max
def containsNearbyDuplicate(nums: Array[Int])(k: Int): Boolean =
val indexesToCheck = for
i <- 0 until nums.length
j <- max(0, i - k) to min(nums.length - 1, i + k)
if i != j
yield (i, j)
indexesToCheck.exists case (i, j) => nums(i) == nums(j)
containsNearbyDuplicate(nums = Array(1, 2, 3, 1, 5))(k = 3)
containsNearbyDuplicate(nums = Array(1, 2, 3, 1, 5))(k = 2)
containsNearbyDuplicate(nums = Array(1, 0, 1, 1, 5))(k = 1)
【讨论】:
以上是关于以下代码中的错误是啥?没有得到预期的输出的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 错误:“(200-299)中的预期状态代码,得到 404”