【问题标题】: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 输出 错误的 预期的 真的

【问题讨论】:

标签: scala scala-collections


【解决方案1】:

我不认为您正在评估内部列表的完整长度。

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

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

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

使用 until 将排除,因此如果您使用长度为 3 的 i &lt;- 0 until nums.length -1,则 i 的值将是 0、1、2 和 end。

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

否则,i &lt;-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)
    

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多