使用scala和算法进行锻炼

时间:2016-04-27 07:46:00

标签: algorithm scala

想要提高我的算法技能。 例如,像这样的任务

需要按照下一个规则合并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))
  }

你能否推荐一些这样的任务资源?

我可以在哪里发布和讨论我的实施?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用Hacker Rank解决许多(并不总是功能性)问题。

此外,红皮书(Scala中的Functional Programming)在github上的解决方案也存在很大问题。

最后,不用说回答SO问题是获得你想要的另一种好方法。

答案 1 :(得分:0)

尝试挑战您的算法技能的Euler Project以及您对所选编程语言的理解,例如Scala。

另外 Scala for the Impatient 书籍包括许多练习。