使用scala的光盘交叉点数量

时间:2017-01-02 21:15:21

标签: scala

我是斯卡拉的新世界。 我试图解决一个贪婪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个解决方案中完成。 为什么会引发错误?有没有办法优化它?

1 个答案:

答案 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
}