【发布时间】:2020-05-06 23:09:43
【问题描述】:
我通过解决算法问题来练习 Scala,并通过 leetcode 解决了这个问题:
给定一个整数数组,返回两个数字的索引,例如 它们加起来就是一个特定的目标。您可以假设每个输入 将只有一个解决方案,并且您可能不会使用相同的元素 两次。
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
我想出了以下代码
def twoSum(nums: Array[Int], target: Int): Array[Int] = {
val map = scala.collection.mutable.Map.empty[Int, Int]
nums.zipWithIndex.foreach{ case(num, idx) =>
map.get(idx) match {
case Some(r) => return Array(r, idx)
case None => map += (idx -> (target-num))
}
}
Array(-1, -1)
}
似乎我以错误的方式将值添加到 map,因为对于每个输入我都会得到一个 Array(-1,-1) 结果。
预期的灵魂。
def twoSum(nums: Array[Int], target: Int): Array[Int] = {
var map = Map.empty[Int, Int]
for ((v, i) <- nums.zipWithIndex) {
map.get(v) match {
case Some(r) => return Array(r, i)
case None => map ++= Map((target - v) -> i)
}
}
Array(-1, -1)
}
你能指出我的错误并解释如何正确更新 hashMap 吗?在使用可变 Map 更新元素时,我引用了这个 post。
【问题讨论】:
-
请注意:在这个例子中你完全没有理由使用可变性。也没有理由使用
return。
标签: scala