zoukankan      html  css  js  c++  java
  • 875. Koko Eating Bananas

    package LeetCode_875
    
    /**
     * 875. Koko Eating Bananas
     * https://leetcode.com/problems/koko-eating-bananas/description/
     *
     * Koko loves to eat bananas. There are N piles of bananas, the i-th pile has piles[i] bananas.
     * The guards have gone and will come back in H hours. Koko can decide her bananas-per-hour eating speed of K.
     * Each hour, she chooses some pile of bananas, and eats K bananas from that pile.
     * If the pile has less than K bananas, she eats all of them instead, and won't eat any more bananas during this hour.
    Koko likes to eat slowly, but still wants to finish eating all the bananas before the guards come back.
    Return the minimum integer K such that she can eat all the bananas within H hours.
    
    Example 1:
    Input: piles = [3,6,7,11], H = 8
    Output: 4
    
    Example 2:
    Input: piles = [30,11,23,4,20], H = 5
    Output: 30
    
    Example 3:
    Input: piles = [30,11,23,4,20], H = 6
    Output: 23
    
    Constraints:
    1. 1 <= piles.length <= 10^4
    2. piles.length <= H <= 10^9
    3. 1 <= piles[i] <= 10^9
     * */
    class Solution {
        /*
        * solution: keep tracking to check the speed if can finish
        * Time complexity:O(n), Space complexity:O(1)
        * */
        fun minEatingSpeed(piles: IntArray, H: Int): Int {
            var sum = 0L
            for (pile in piles) {
                sum += pile
            }
            var speed = (sum - 1) / H + 1L
            while (true) {
                if (canFinish(piles, H, speed)) {
                    return speed.toInt()
                } else {
                    speed++
                }
            }
        }
    
        private fun canFinish(piles: IntArray, H: Int, speed: Long): Boolean {
            //speed is how many pile can eat per hour
            var hour = 0L
            for (pile in piles) {
                hour += (pile - 1) / speed + 1
            }
            return hour <= H
        }
    }
  • 相关阅读:
    event事件学习小节
    简单的碰壁反弹效果
    从全局中通过class类名获取标签
    js中常用的Tab切换
    将一串字符串转变为驼峰样式(字符串练习)
    js控住DOM实现发布微博简单效果
    使用js制作一般网站首页图片轮播效果
    使用js实现带有停顿效果的图片滚动(按钮控制)
    js实现标准无缝滚动
    toLowerCase和toLocaleLowerCase的区别
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13517476.html
Copyright © 2011-2022 走看看