我在Scala中解决了简单的Leetcode问题Ransom Note,如下所示:
def canConstruct(ransomNote: String, magazine: String): Boolean = {
val magazineChars = magazine.toSeq.groupBy(identity).mapValues(_.size)
val ransomChars = ransomNote.toSeq.groupBy(identity).mapValues(_.size)
ransomChars.forall { case (c, num) => magazineChars.getOrElse(c, 0) >= num }
}
这个解决方案还可以,但是比Scala中其他公认的解决方案要慢。
现在我想知道如何加快速度。你会建议如何优化这个解决方案?
2条答案
按热度按时间hgncfbus1#
出于性能考虑,您应使用低级数据结构(
primitive type
代替object type
,array of primitive type
代替List, Map
,即)和低级语法(while
代替foreach loop
,即)这是我的解决方案,击败90% ~ 100%(它是随机的),你可以通过替换
foreach
到while loop
和替换forall
到while loop
太快,但它太繁琐:2nbm6dog2#
上述解决方案的略微优化版本:
结果如下(运行几次后):