【问题标题】:Getting timeout error in New Year Chaos problem using scala使用scala在新年混乱问题中出现超时错误
【发布时间】:2019-06-01 18:04:04
【问题描述】:

我在 Hackerrank 中获得了用于新年混沌问题的有效 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)

    }

【问题讨论】:

    标签: arrays scala


    【解决方案1】:

    说实话我不明白你的实现,但是

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

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

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

    【讨论】:

    • 感谢您的回复。是的,我猜 indexOf 是可能的罪魁祸首。找到了另一种方式。
    • 我很高兴它有帮助。为了感兴趣,我自己也实现了它。如果你喜欢我可以和你分享代码。
    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2011-09-09
    • 2021-08-18
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多