Scala基础学习,使用Scala实现Leetcode378的两种方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34446485/article/details/81122307

PS:

从Java转Scala的时候会各种不适应Scala的函数式编程。。学习路线确实是陡峭的。。

连CSDN都没有Scala代码样式。。。只能使用GO了

主要点:

1、如何隐藏Java集合

2、如何实现Java方法

3、如何启动使用函数式代码

4、Scala泛型简单使用

5、如何使用break函数模拟的continue关键字【break同理,放在for外面即可】

6、任意地点的包导入

7、Scala数组使用

扫描二维码关注公众号,回复: 5896331 查看本文章

8、Scala队列简单使用

package cn.edu.jxnu.leetcode.scala

import scala.collection.mutable.PriorityQueue
import java.util.{ PriorityQueue ⇒ _, _ } //隐藏java集合

/**
 * 使用scala队列实现378
 */
object Leetcode_378_Array_Queue extends App {

    class Tuple(var x: Int, var y: Int, var v: Int) extends Comparable[Tuple] {

        override def compareTo(that: Tuple): Int = {
            return this.v - that.v
        }
    }

    /**
     * 无法识别运行main的时候记得重新编译一下
     */
    override def main(args: Array[String]) {

        val nums = Array(Array(1, 5, 9), Array(10, 11, 13), Array(12, 13, 15))
        val k = 8
        val ret = kthSmallest(nums, k)
        print(ret)

    }

    def kthSmallest(matrix: Array[Array[Int]], k: Int): Int = {
        val m = matrix.length
        val n = matrix(0).length
        val pq = new PriorityQueue[Tuple]
        for (j ← 0 until n) {
            pq.enqueue(new Tuple(0, j, matrix(0)(j)))
            // pq.offer(new Tuple(0, j, matrix(0)(j))
        }
        for (i ← 0 until k - 1) { // 小根堆,去掉 k - 1 个堆顶元素,此时堆顶元素就是第 k 的数
            val t = pq.dequeue()
            import util.control.Breaks._
            breakable(
                if (t.x == m - 1) break)
            pq.enqueue(new Tuple(t.x + 1, t.y, matrix(t.x + 1)(t.y)))
        }
        return pq.dequeue().v
    }

}

package cn.edu.jxnu.leetcode.scala

/**
 * 有序矩阵的 Kth Element
 *
 * 378. Kth Smallest Element in a Sorted Matrix ((Medium))
 *
 * matrix = [
 * [ 1,  5,  9],
 * [10, 11, 13],
 * [12, 13, 15]
 * ],
 * k = 8,
 * return 13.
 * @author 梦境迷离
 * @time 2018年7月18日
 * @version v1.0
 */
object Leetcode_378_Array extends App { //自带main方法

    /**
     * 函数的定义必须在调用之前
     */
    val kthSmallest = (matrix: Array[Array[Int]], k: Int) => {
        val m = matrix.length
        val n = matrix(0).length
        var lo = matrix(0)(0)
        var hi = matrix(m - 1)(n - 1)
        while (lo <= hi) {
            val mid = lo + (hi - lo) / 2
            var cnt = 0
            for (i ← 0 until m) {
                for (j ← 0 until n if matrix(i)(j) <= mid) {
                    cnt += 1 //scala没++  --
                }
            }
            if (cnt < k) lo = mid + 1
            else hi = mid - 1
        }
        lo
    }

    val nums = Array(Array(1, 5, 9), Array(10, 11, 13), Array(12, 13, 15))
    val k = 8
    val ret = kthSmallest(nums, k)
    print(ret)

}

github:https://github.com/jxnu-liguobin/Java-Learning-Summary/tree/master/Java-Learning-Summary/src/cn/edu/jxnu/leetcode/scala   Scala  For Leetcode

猜你喜欢

转载自blog.csdn.net/qq_34446485/article/details/81122307
今日推荐