咖啡杯问题(贪心、动态规划)

问题:

​ 咖啡杯,给一个arr数组,里面每一个数表示一台咖啡机做一杯咖啡需要的时间,此时有N个人需要喝咖啡,假设这个人喝完这杯咖啡的时间为0,喝完咖啡后,有一台洗咖啡杯的机器,每洗一个杯子需要 K 的时间,但是如果不洗,放在哪里M的时间也可以干净,问所有咖啡杯干净的时间点是多少,假如时间点从0开始

    public static class Node {
   
        public Integer consumeTime;
        public Integer times;

        public Node(Integer ct, Integer t) {
   
            this.consumeTime = ct; //表示这个咖啡机制作前面的咖啡以及过去了多少时间
            this.times = t; //制作咖啡需要的时间
        }
    }

暴力尝试版本
  • 因为做咖啡需要时间,所以我们用小根堆,来实现怎么拿到最先空下来的咖啡机
    • 准备一个node,包含两个字段,一个是consumeTime(这个咖啡机制作前面的咖啡以及过去了多少时间),times(制作咖啡需要的时间)
    • 准备一个小根堆,比较的值是: 做咖啡已经消耗的时间+这个咖啡机做一杯需要的时间 ,这样就可以知道现在那台咖啡机最先空闲下来
  • 怎么求每个人喝完咖啡的时间呢
    • 因为是N个人,所以循环N次,每次从小根堆中弹出最先闲下来的咖啡机,然后将咖啡机前面制作咖啡需要的时间+这个咖啡机制作一杯需要的时间加起来,这个时间就是这个客人拿到咖啡的时间点,也是喝完的时间点,因为不考虑客人喝咖啡的时间
    • 当然还要设置这台咖啡机在制作完当前咖啡后,下一次空闲的时间节点(node.consumeTime),这个值也是上一步客人 拿到咖啡的时间点
    /**
     * @param arr 咖啡机数量和每台咖啡机制作一杯咖啡需要的时间
     * @param N   总共要喝咖啡的人数
     * @param K   咖啡机清洗一个杯子的时间
     * @param M   自然挥发干净的时间
     */
    public static int AllTime(int[] arr, int N, int K, int M) {
   
        PriorityQueue<Node> queue = new PriorityQueue<>(Comparator.comparingInt(o -> (o.consumeTime + o.times))); //小根堆
        Arrays.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值