我正在解决leetcode上的问题-https : //leetcode.com/problems/minimum-absolute-difference/
我似乎无法理解为什么将结果列表下面的代码重置为nil后未正确附加。我当然在网上看,但无法理解这种行为背后的概念。有人可以解释为什么在将结果分配为Nil之后,没有值可以添加到该列表中吗?如何重置列表?我尝试了ListBuffer
和,clear()
但遇到了同样的问题,在运行结束时结果为Nil
预期行为:输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
实际行为:输入:arr = [4,2,1,3]
输出:List()
def minimumAbsDifference(arr: Array[Int]): List[List[Int]] = {
val sortedInput = arr.sorted
var min = Integer.MAX_VALUE
var result = Seq[List[Int]]()
for(i <- 0 until sortedInput.length - 1){
val diff = sortedInput(i+1) - sortedInput(i)
if(min > diff){
result = Nil
min = diff
}
if(min == diff){
result :+ List(sortedInput(i),sortedInput(i+1))
}
}
result.toList
}
你分配Nil
到result
从来就不是分配别的。
因为List
是不可变的,所以result :+ List(...)
返回一个新列表,然后将其丢弃。您需要将新列表分配给result
。
其他一些注意事项:
追加到列表的效率极低(决定不是“ leet”)。预先添加(反向生成结果)然后最后反向添加,效率更高。
List
按索引访问项目也是极其低效的。
使用var
一般应避免在Scala中,虽然这个特定使用(包含本地给原本纯函数)是不是超出苍白。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句