1.一千万个随机数,随机数范围在1到1亿之间,现在要求写出一种算法,将1到1亿之间没有出现的随机数求出来
第一题看这里
2 编 写 一 个 函 数 , 接 收 一 个 字 符 串 集 合 , 以 及 一 个 从 字 符 串 到 整 数 的 映 射
,返回整数集合,其值为能和集合中某个字符串相应的映射值。举例来说,给Array(“Tom”,”Fred”,”Harry”) 和Map(“Tom”->3,”Dick”->4,”Harry”->5),返回Array(3,5)
做了两种实现,一种是map,一种是flatMap(注释部分)
//map将集合中的每个元素处理,并将处理后的结果返回,返回的是option
// 而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List
def func(a: Array[String], m: Map[String, Int]): Array[Int] = {
//val res = a.flatMap(m.get(_))//简单的实现
var ans: Array[Int] = Array[Int]()
val r = a.map(m.get(_))
for (a <- r) {
ans = show(a, ans)
}
//从Option中取出Some中数据
def show(r: Option[Int], arr: Array[Int]) = r match {
case None => arr
case Some(s) => arr :+ s
}
ans
}
3.对给定的整型列表lst,(lst :\ ListInt)(:: )得到的是什么? (ListInt /: lst)(:+)又得到什么?如何修改这两个操作,对原来列表反向操作?
val a=(lst :\ ListInt)(::)
等价于
val c=lst.foldRight(ListInt)(+:)
相当于foldRight,添加lst中的元素到ListInt,初始是一个空List
从右开始操作,每次添加的元素在左侧,所以只能用::或+:
val b=(ListInt/:lst)(:+)
等价于
val d=lst.foldLeft(ListInt)(:+)
foldLeft,从左向右添加元素到列表,所以只能用:+