首页 > 其他分享 >泡咖啡问题

泡咖啡问题

时间:2022-10-25 19:24:13浏览次数:76  
标签:咖啡 cur int work 问题 start 咖啡机

泡咖啡问题

作者:Grey

原文地址:

博客园:泡咖啡问题

CSDN:泡咖啡问题

题目描述

数组 arr 中记录每个咖啡机制造一杯咖啡的时间,假设有 m 个人,都在 0 号时间点开始排队,返回一个长度为 m 的数组,代表每个人得到咖啡的时间,

要求:最后一个得到咖啡的人的时间尽可能短。

主要思路

设置一个小根堆,Java 中就是 PriorityQueue,小根堆的比较策略就是:咖啡机开始工作的时间加上这个咖啡机制作一杯咖啡的时间之和越小的在堆顶。

每次做完一杯咖啡以后,弹出,记录下此时的时间存入结果数组,并且修改此时的咖啡机的开始工作时间,再次压入小根堆,然后小根堆弹出下一个元素,如此往复,一直到小根堆弹出 m 个元素。

完整代码如下


import java.util.PriorityQueue;

public class Code_Coffee {
    public static class CoffeeMachine {
        @Override
        public String toString() {
            return "CoffeeMachine{" + "start=" + start + ", work=" + work + '}';
        }

        public int start;
        public int work;

        public CoffeeMachine(int s, int w) {
            start = s;
            work = w;
        }

    }

    public static int[] bestChoices(int[] arr, int m) {
        int[] ans = new int[m];
        PriorityQueue<CoffeeMachine> heap = new PriorityQueue<>((o1, o2) -> o1.start + o1.work - o2.start - o2.work);
        for (int coffeeWork : arr) {
            // 制造咖啡最短时间的咖啡机在堆顶
            heap.add(new CoffeeMachine(0, coffeeWork));
        }
        for (int i = 0; i < m; i++) {
            CoffeeMachine cur = heap.poll();
            // 第i号人使用cur这个咖啡机,所以cur这个咖啡机的开始时间变为cur.start + cur.work
            System.out.println(i + " 号人使用 " + cur + "咖啡机");
            ans[i] = cur.start + cur.work;
            System.out.println(i + " 号人在 [" + cur.start + "] 时刻搞定完一杯咖啡");
            cur.start = ans[i];
            heap.add(cur);
        }
        return ans;
    }

    public static void main(String[] args) {
        int m = 5;
        int[] arr = {2, 3, 5};
        bestChoices(arr, m);
    }
}

image

如上示例,运行 main 方法,可以得到结果

0 号人使用 CoffeeMachine{start=0, work=2}咖啡机
0 号人在 [0] 时刻搞定完一杯咖啡
1 号人使用 CoffeeMachine{start=0, work=3}咖啡机
1 号人在 [0] 时刻搞定完一杯咖啡
2 号人使用 CoffeeMachine{start=2, work=2}咖啡机
2 号人在 [2] 时刻搞定完一杯咖啡
3 号人使用 CoffeeMachine{start=0, work=5}咖啡机
3 号人在 [0] 时刻搞定完一杯咖啡
4 号人使用 CoffeeMachine{start=4, work=2}咖啡机
4 号人在 [4] 时刻搞定完一杯咖啡

更多

算法和数据结构笔记

标签:咖啡,cur,int,work,问题,start,咖啡机
From: https://www.cnblogs.com/greyzeng/p/16825983.html

相关文章

  • 亚稳态问题回顾
    当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?做信号处理(transform)时对该问题的固有......
  • 自动定位问题、自动修复故障?托管云这个功能有点心动​
    用户业务应用增多,硬件性能跟不上?云环境变得复杂,运维工作量不减反增?运维人力成本日益激增,技术人才越招越少?——信服云托管云的AIOps业务全生命周期持续性保障系统来啦!帮助企......
  • 04Jmeter之乱码问题
    在使用Jmeter时会出现乱码问题。实际是编码问题,jmeter默认按照ISO-8859-1编码格式进行解析,总结以下解决方法: 方法一:BeanShell取样器添加取样器:BeanShell取样器:输入p......
  • ArcGIS打开属性、标注、数据视图时,变慢、卡顿、缓冲久等问题的解决
    ArcGIS10.5制图过程中卡顿问题ArcGISDesktopDialogInitializationPerformancePatchhttps://support.esri.com/en/download/7678https://blog.csdn.net/qq_41127811......
  • 前端文件下载问题
    1,下载后端返回的blob文件//下载blob文件(注意请求需要加上responseType:'blob')exportconstdownloadBlob=(res:Blob,fileName:string):void=>{letblo......
  • EasyCVR数据库优化:ehome设备表不能同步更新的问题解决
    EasyCVR视频融合云平台可支持多协议、多设备接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等协议,同时也能分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视......
  • EasyPlayer播放H.265的HLS视频流出现加载异常的问题分析及解决方法
    EasyPlayer是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等。为了满足用户的多样化需求,我们也基于EasyP......
  • 【算法学习】完全背包问题公式记录
    朴素f[i][j]=max(f[i-1][j],f[i-1][j-v]+w,f[i-1][j-2v]+2w,...)f[i][j-v]=max(f[i-1][j-v],f[i-1][j-2v]+w,...)=>f[i][j]=max......
  • 背包问题的倒序枚举与正序枚举
    这可能是困扰很多人很长时间的问题吧。先把各个变量列出来体积为的背包,有个物品,每个物品的体积为,价值为,每个物品装一次,求最大价值来这看的肯定都是学习过基础背包的人,如果没......
  • 背包问题常见解题策略与例题解析
    背包问题作为常见的一种Dp题目的变法多种多样然而只要你理解透了背包的做法和各种优化模型就显而易见了千万不要似懂非懂如果还有疑虑可以参考我的另一篇文章​​​背......