代码之家  ›  专栏  ›  技术社区  ›  Raman Mishra

如何使以下功能更有效?

  •  0
  • Raman Mishra  · 技术社区  · 6 年前

    这是一个函数,它从给定的数组生成一个映射。其中key是整数,value是给定数组中该数字的频率。

    我就是这么写的:

    def findMinKeyWithMaxFrequency(arr: List[Int]): Int = {
        val ansMap:scala.collection.mutable.Map[Int,Int] = scala.collection.mutable.Map()
    
        arr.map(elem=> ansMap+=(elem->arr.count(p=>elem==p)))
        ansMap.filter(_._2==ansMap.values.max).keys.min
      }
    val arr = List(1, 2 ,3, 4, 5, 4, 3, 2, 1, 3, 4)
    
    val ans=findMinKeyWithMaxFrequency(arr) // output:3
    

    我怎样才能使它更有效率,它给了我正确的答案,但我认为这不是解决问题的最有效的方法。

    在给定的例子中,3和4的频率是3,所以答案应该是3,因为3小于4。

    编辑1:

    def findMinKeyWithMaxFrequency(arr: List[Int]): Int = {
        val ansMap=arr.toSet.map{ e: Int =>(e,arr.count(x=>x==e))}.toMap
    
        ansMap.filter(_._2==ansMap.values.max).keys.min
      }
    

    它能更有效吗?它是为给定问题编写解决方案的最实用的方法吗。

    1 回复  |  直到 6 年前
        1
  •  3
  •   jwvh    6 年前
    def findMinKeyWithMaxFrequency(arr: List[Int]): Int =
      arr.groupBy(identity).toSeq.maxBy(p => (p._2.length,-p._1))._1
    

    使用 groupBy()