【发布时间】:2019-12-19 00:57:23
【问题描述】:
我正在尝试在黑客地球中提交以下 scala 解决方案,记住我!。但是,由于超出了时间限制,它没有被占用。
关于如何提高运行时间的任何建议?
我看到计时器,循环中的 readInt(第二个 for 循环)需要更多时间,随着输入的增加......需要考虑我可以使用其他任何方法来改进吗?
import java.util.concurrent.TimeUnit
import scala.collection.mutable.{ArrayBuffer, Map}
import scala.io.StdIn.{readInt, readLine}
import scala.io.Source.stdin
object MemorizeMe {
def main(args: Array[String]): Unit = {
var inpLen = readInt()
var inp = readLine().split(" ").map(_.toInt)
val numQueries = readInt()
var queryList = new ArrayBuffer[Int]
var numsMap = Map[Int, Int]()
time {for (i <- inp) if (numsMap.contains(i)) numsMap(i) = numsMap(i) + 1 else numsMap += (i -> 1)}
time{for (i <- 1 to numQueries) queryList += readInt()}
time{for(i <- queryList) if (numsMap.contains(i)) println(numsMap(i)) else println("NOT PRESENT")}
/*for (x <- io.Source.stdin.getLines) {
val i = x.toInt
if (numsMap.contains(i)) println(numsMap(i)) else println("NOT PRESENT")
}*/
}
def time[R](block: => R): R = {
val t0 = System.nanoTime()
val result = block // call-by-name
val t1 = System.nanoTime()
println(TimeUnit.SECONDS.convert((t1 - t0), TimeUnit.NANOSECONDS) + "secs")
result
}
}
【问题讨论】:
-
你能发布你得到的每个时间测量吗?