Arrays 用scala解决新年混沌问题中的超时错误

Arrays 用scala解决新年混沌问题中的超时错误,arrays,scala,Arrays,Scala,我已经为Hackerrank中的新年混乱问题准备了一个有效的scala代码,但我在一些测试用例中收到超时错误 请帮助我优化以下代码: def minimumBribes(q: Array[Int]){ val c = q.sorted var swap = 0 var count_swap=0 import scala.util.control._ val loop = new Breaks var

我已经为Hackerrank中的新年混乱问题准备了一个有效的scala代码,但我在一些测试用例中收到超时错误

请帮助我优化以下代码:

def minimumBribes(q: Array[Int]){
        val c = q.sorted
        var swap = 0
        var count_swap=0
        import scala.util.control._
        val loop = new Breaks
        var temp = 0
        var flag = true

        loop.breakable
        {
            for (i <- q.length-1 to 0 by -1)

            {   
                    swap = 0
                 if (q(i) != i+1)
                 {
                        swap=i-q.indexOf(i+1)
                        if (swap > 2) {println("Too Chaotic");flag=false;loop.break()}
                        else 
                            {
                                temp= q(q.indexOf(i+1))
                                q(q.indexOf(i+1)) = q(i-1)
                                q(i-1) = q(i)
                                q(i) = temp

                                count_swap += swap
                                if(q.deep == c.deep){
                                loop.break()
                                }
                            }
                }
            }            

        }   
        if (flag)println(count_swap)

    }

def minimumBribes(q:Array[Int]){
val c=q
var掉期=0
var计数\u交换=0
导入scala.util.control_
val loop=新的中断
变量温度=0
var flag=true
易破碎的
{
对于(I2){println(“太混乱”);flag=false;loop.break()}
其他的
{
温度=q(q.indexOf(i+1))
q(q.indexOf(i+1))=q(i-1)
q(i-1)=q(i)
q(i)=温度
计数\u交换+=交换
如果(q.deep==c.deep){
loop.break()
}
}
}
}            
}   
if(标志)println(计数交换)
}

老实说,我不理解您的实现,但是

1)
q.sorted
可能已经没有时间了,因为
n
是~10^5

2)
q.sorted
调用实际上是冗余的,因为它只是一个
1..n
序列


3) 使用
q.indexOf
会使算法变得复杂。可以在线性时间内求解。

谢谢您的回复。是的,我想indexOf可能是罪魁祸首。找到了另一种方法。我很高兴它有帮助。为了兴趣,我自己也实施了它。如果你喜欢,我可以和你分享代码。