使用scala在新年混乱问题中获取超时错误

时间:2019-06-01 18:04:04

标签: arrays scala

在Hackerrank中,我有一个解决New Year Chaos问题的scala代码,但是在某些测试案例中,我收到了超时错误

https://www.hackerrank.com/challenges/new-year-chaos/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=arrays

请帮助我优化以下代码:

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)

    }

1 个答案:

答案 0 :(得分:0)

说实话,我不理解您的实现,但

1)q.sorted约为10 ^ 5,n可能已经用完了。

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

3)使用q.indexOf会使算法O(n ^ 2)变得复杂。可以在线性时间内解决。