力扣: 爱吃香蕉的珂珂

优化算法:解决Java堆数组吃饼干问题
本文介绍了一个关于Java编程中的算法问题,涉及如何在给定时间内以最小速度吃完不同数量的饼干。作者通过Solution类实现了一个求解最小吃饼干速度的方法,展示了动态规划和搜索策略的应用。


import java.util.Arrays;

/**
 * @author xnl
 * @Description:
 * @date: 2022/6/7   22:14
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] piles = {30,11,23,4,20};
        System.out.println(solution.minEatingSpeed(piles, 6));
    }

    public int minEatingSpeed(int[] piles, int h) {
        int maxValue = Arrays.stream(piles).max().getAsInt();
        if (piles.length == h){
            return maxValue;
        }

        int left = 1, right = maxValue, k = maxValue;
        while (left < right){
            int speed = (left + right) >> 1;
            int time = getTime(piles, speed);
            // 证明这个速度可以吃完,看看能不能找到速度更块的
            if (time <= h){
                k = speed;
                right = speed;
            } else {
                // 这个速度吃不完,咋办?吃的速度加一
                left = speed + 1;
            }
        }
        return k;
    }

    private int getTime(int[] piles, int speed){
        int countTime = 0;
        for (int pile : piles) {
            int count = pile % speed == 0 ? pile / speed : (pile / speed )+ 1;
            countTime += count;
        }
        return countTime;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值