0
点赞
收藏
分享

微信扫一扫

HUAWEI 机试题:工厂流水线调度

那小那小 2022-02-03 阅读 130
scala

题目描述:

  • 一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。
  • 现给定流水线个数m,需要完成的作业数n, 每个作业的处理时间分别为t1,t2…tn。请你编程计算处理完所有作业的耗时为多少?
  • 当n>m时,首先处理时间短的m个作业进入流水线,其他的等待,当某个作业完成时,依次从剩余作业中取处理时间最短的进入处理。

输入描述:

  • 第一行为2个整数(采用空格分隔),分别表示流水线个数m和作业数n
  • 第二行输入n个整数(采用空格分隔),表示每个作业的处理时长t1,t2…tn。
  • 0< m,n<100
  • 0<t1,t2…tn<100
  • 注:保证输入都是合法的。

输出描述:

  • 输出处理完所有作业的总时长

代码:

def main(args: Array[String]): Unit = {

    // 获取输入
    val MN = StdIn.readLine().split(" ").map(_.toInt)
    val m = MN(0)
    val n = MN(1)
    val NTime = StdIn.readLine().split(" ").map(_.toInt).toList.sorted

    println(NTime)

    // 当 n <= m 时
    if (n <= m) {
        println(NTime(NTime.length - 1))
        return
    }

    // 当 n > m 时
    var res = new ListBuffer[Int]

    // 处理第一批
    for (i <- 0 until m) {
        res += NTime(i)
    }

    // 处理剩下批次,一次替换最小值
    for (i <- m until NTime.length) {
        val resTmp = res.sorted
        res(0) = NTime(i) + resTmp(0)
    }

    // 输出结果
    println(res.max)
}

 


❤️ END ❤️

举报

相关推荐

0 条评论