想要提高我的算法技能。 例如,像这样的任务
需要按照下一个规则合并2个列表
* ListA = 1 2 4 6 100
* ListB = 5 200
* ListRes = 1 2 4 5 6 100 200
这是实现
@tailrec
def mergeList(a: List[Int], b: List[Int], res: List[Int]): List[Int] = {
if (a.isEmpty) return res ::: b
if (b.isEmpty) return res ::: a
if (a.head < b.head) mergeList(a.tail, b, res ::: List(a.head)) else
mergeList(a, b.tail, res ::: List(b.head))
}
检查的单元测试:
test("testMergeList") {
val a = List(1, 6, 7, 8, 40)
val b = List(1, 7, 8, 9, 11, 20, 100)
println(Workout.mergeList(a, b, List()))
println(Workout.mergeList(b, a, List()))
assert(Workout.mergeList(a, b, List()) equals List(1, 1, 6, 7, 7, 8, 8, 9, 11, 20, 40, 100))
assert(Workout.mergeList(b, a, List()) equals List(1, 1, 6, 7, 7, 8, 8, 9, 11, 20, 40, 100))
}
你能否推荐一些这样的任务资源?
我可以在哪里发布和讨论我的实施?
感谢。
答案 0 :(得分:1)
您可以使用Hacker Rank解决许多(并不总是功能性)问题。
此外,红皮书(Scala中的Functional Programming)在github上的解决方案也存在很大问题。
最后,不用说回答SO问题是获得你想要的另一种好方法。
答案 1 :(得分:0)
尝试挑战您的算法技能的Euler Project以及您对所选编程语言的理解,例如Scala。
另外 Scala for the Impatient 书籍包括许多练习。