算法题 — 可可喜欢吃香蕉(二分查找法)

可可喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开,将在 H 小时后回来。

可可可以决定它吃香蕉的速度为 speed (单位:根/小时)。每个小时,可可都会选择一堆香蕉,并吃掉 speed 根。如果这堆香蕉少于 K 根,可可就会吃掉这堆里所有的香蕉,然后,在这一小时内不会吃更多的香蕉。

可可想要在警卫回来之前吃掉所有的香蕉。

示例:

输入:piles = [3, 6, 7, 11],h = 8,输出:4

输入:piles = [30, 11, 23, 4, 20],h = 5,输出:30

输入:piles = [30, 11, 23, 4, 20],h = 6,输出:23

fun main() {
    val piles1 = arrayOf(3, 6, 7, 11)
    val piles2 = arrayOf(30, 11, 23, 4,20)

	getMinSeed(piles1, 8)
  	getMinSeed(piles2, 5)
  	getMinSeed(piles2, 6)
}

fun getMinSeed(piles: Array<Int>, h: Int): Int {
    var left = 1 // 最小的速度
    var right = getMaxNum(piles)  // 最大速度,最大速度是数组中最大的的元素数量

    while (left < right) {
        val mid = left + (right - left) / 2
        if (canFinish(piles, mid, h)) {
            right = mid
        } else {
            left = mid + 1
        }
    }
    return left
}

/**
 * 按照当前的速度是否可以吃完香蕉
 */
fun canFinish(piles: Array<Int>, speed: Int, h: Int): Boolean {
    var t = 0 // 按照当前的速度,吃完所有的香蕉所需要的时间
    for (num in piles) {
        if (num % speed != 0) {
            t++
        }
        t += num / speed
    }
    return t <= h
}

/**
 * 获取数组中的最大值
 */
fun getMaxNum(piles: Array<Int>): Int {
    var max = 0
    for (n in piles) {
        // 获取 piles 数组中最大的元素值
        max = n.coerceAtLeast(max)
    }
    return max
}

相关推荐

  1. 算法可可喜欢香蕉(二分查找)

    2024-06-08 19:06:03       30 阅读
  2. 算法-数组】二分查找

    2024-06-08 19:06:03       49 阅读
  3. 每日一,狒狒香蕉

    2024-06-08 19:06:03       64 阅读
  4. 每日OJ_算法_二分查找①_力扣704. 二分查找

    2024-06-08 19:06:03       58 阅读
  5. C++ 二分查找【面试】

    2024-06-08 19:06:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 19:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 19:06:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 19:06:03       82 阅读
  4. Python语言-面向对象

    2024-06-08 19:06:03       91 阅读

热门阅读

  1. PostgreSQL的内存结构

    2024-06-08 19:06:03       29 阅读
  2. git版本管理工具

    2024-06-08 19:06:03       31 阅读
  3. 动态语言的开源编译器汇总

    2024-06-08 19:06:03       26 阅读
  4. Oracle 收缩表高水位线

    2024-06-08 19:06:03       24 阅读
  5. Linux网络编程之select的理解

    2024-06-08 19:06:03       30 阅读
  6. MATLAB sort

    2024-06-08 19:06:03       26 阅读
  7. 2024-06-04 问AI: 介绍一下 Tensorflow 里面的 Keras

    2024-06-08 19:06:03       25 阅读
  8. spec文件是干嘛的?

    2024-06-08 19:06:03       30 阅读
  9. 11本AI人工智能相关电子书推荐(带下载地址)

    2024-06-08 19:06:03       31 阅读
  10. 深度学习 - PyTorch简介

    2024-06-08 19:06:03       23 阅读