微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以下代码中的错误是什么?没有得到预期的输出

如何解决以下代码中的错误是什么?没有得到预期的输出

给定一个整数数组和一个整数 k,找出数组中是否有两个不同的索引 i 和 j 使得 nums[i] = nums[j] 并且 i 和 j 之间的绝对差至多为 k .

示例 1: 输入:nums = [1,2,3,1],k = 3 输出:真

示例 2: 输入:nums = [1,1,k = 1 输出:真

tdata = Array{Int64,1}[]
# After 1st collection,push the first batch of data
push!(tdata,[1,4,5])
# After 2nd collection,push this batch of data
push!(tdata,[11,12,13,14,15])

您的输入 [1,1] 3 输出 错误的 预期的 真的

解决方法

我认为您没有评估内部列表的完整长度。

正如所写,j 永远不会等于 3

我认为如果你让你的内部循环读取 for (j <- i until nums.length) 应该可以工作。

可能也想修复外循环。否则,i 永远不会达到数组中存储的值 3。

使用until 会排除,所以如果你使用i <- 0 until nums.length -1,其中length 是3,那么i 的值将是0、1、2 和end。

如果您想减去 - 1,因为它对您来说更容易或更有意义,那么您可能需要使用 i <- 0 to nums.length - 1

否则,i <-0 until nums.length 在遍历 for 循环时将导致 i 的值为 0、1、2、3。

希望有所帮助。

,

这是功能性的,效率为 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,5))(k = 2)
containsNearbyDuplicate(nums = Array(1,5))(k = 1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。