我是斯卡拉的新世界。 我试图解决一个贪婪scala问题。 我首先implemented在我的机器上,它没有错误。 但是,关于可靠性,它会引起
的错误exec.scala:38: error: not found: value Solution
val result: Int = Solution.solution ( A )
^
one error found
即使经过一些谷歌搜索,我也不知道这意味着什么。
这是我在Scala中提出的解决方案
object NumberOfDiscIntersections {
def solution(A: Array[Int]): Int = {
var inter = 0
val sortedA = A.toList.sorted.toArray
val length = sortedA.length
var ind = 1
var idx = 0
while (idx <= length-1){
ind = 0
while (ind <= length-1) {
var diff: Double = sortedA(ind) - sortedA(idx)
if (diff > 0 ){
inter+=1
}
ind += 1
}
idx +=1
}
inter
}
solution(Array(1,5,2,1,4,0))
}
Python实现
A = [1,5,2,1,4,0]
sortedA = sorted(list(set(A)))
length = len(sortedA)
idx = 0
inter = 1
while(idx <= length - 1):
ind = 0
while(ind <= length -1):
diff = sortedA[ind] - sortedA[idx]
if (diff >0): inter+=1
ind+=1
idx+=1
print inter
它按预期在11个解决方案中完成。 为什么会引发错误?有没有办法优化它?
答案 0 :(得分:1)
我不清楚你想要实现什么,但从代码看起来你想要将一组中的每个元素(一组不同的值)与所有其他元素进行比较并计算一个次数a &GT;湾
我注意到Scala代码的结果与Python代码不同,因为一个将inter
初始化为0,而另一个将其初始化为1。
由于max元素将大于所有其他元素,而next-to-max将大于all-others-minus-one等,结果将是{{3} }。为了优化,我可能想要懒惰地生成三角形数字(即仅根据需要),然后索引到所需的结果。
def solution(arr: Array[Int]): Int = {
val tNumber:Stream[Int] = 0 #:: tNumber.zipWithIndex.map{case (n,x) => n+x}
tNumber(arr.distinct.length) // + 1 here if needed
}