华为OD机试真题 Java 实现【快速开租建站】【2023Q1 200分】,附详细解题思路

news2024/11/23 15:36:49

一、题目描述

当前IT部门支撑了子公司颗粒化业务,该部门需要实现为子公司快速开租建站的能力,建站是指在一个全新的环境部署一套IT服务。

每个站点开站会由一系列部署任务项构成,每个任务项部署完成时间都是固定和相等的,设为1。部署任务项之间可能存在依赖,假如任务2依赖任务1,那么等任务1部署完,任务2才能部署。任务有多个依赖任务则需要等所有依赖任务都部署完该任务才能部署。

没有依赖的任务可以并行部署,优秀的员工们会做到完全并行无等待的部署。

给定一个站点部署任务项和它们之间的依赖关系,请给出一个站点的最短开站时间。

二、输入描述

第一行是任务数taskNum,第二行是任务的依赖关系数relationsNum接下来 relationsNum 行,每行包含两个id,描述一个依赖关系,格式为: Di Dj,表示部署任务部署完成了,部署任务j才能部署,IDi 和IDj 值的范围为: [0,taskNum)注:输入保证部署任务之间的依赖不会存在环。

三、输出描述

1个整数,表示一个站点的最短开站时间。

四、解题思路

  1. 创建map,用于存储任务之间的依赖关系,key为任务编号,value为依赖该任务的任务列表;
  2. 循环读取num数据,将依赖关系存储map;
  3. 创建一个长度为n的数组,存储每个任务的最小启动时间;
  4. 创建变量time,用于记录最短开站时间;
  5. 递归调用,计算任务的最小启动时间;
  6. 如果当前任务没有依赖,表示该任务可以立即启动,将其最小启动时间设置为1,并返回1,停止递归;
  7. 遍历当前任务依赖的任务列表,递归调用getMinTime函数来获取依赖任务的最小启动时间,取其中的最大值作为当前任务的最小启动时间minDependTime;
  8. 当前任务的最小启动时间为依赖任务的最小启动时间加1,将该值记录到timeArr数组中,并返回该值;
  9. 输出最短开站时间time;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = Integer.parseInt(sc.nextLine());
    int num = Integer.parseInt(sc.nextLine());

    // 1、创建map,用于存储任务之间的依赖关系,key为任务编号,value为依赖该任务的任务列表
    Map<Integer, List<Integer>> map = new HashMap<>();
    // 2、循环读取num数据,将依赖关系存储map
    for (int i = 0; i < num; i++) {
        String line = sc.nextLine();
        String[] arr = line.split(" ");
        int left = Integer.parseInt(arr[0]);
        int right = Integer.parseInt(arr[1]);
        List<Integer> list = map.getOrDefault(left, new ArrayList<>());
        list.add(right);
        map.put(left, list);
    }

    // 3、创建一个长度为n的数组,存储每个任务的最小启动时间
    int[] timeArr = new int[n];

    // 4、创建变量time,用于记录最短开站时间
    int time = 0;
    for (int i = 0; i < n; i++) {
        // 5、递归调用,计算任务的最小启动时间
        int needTime = getMinTime(i, map, timeArr);
        time = Math.max(time, needTime);
    }
    // 9、输出最短开站时间time
    System.out.println(time);
}

/**
 *
 * @param index 当前位置
 * @param map 输入的数据集合
 * @param timeArr 任务时间
 * @return
 */
public static int getMinTime(int index, Map<Integer, List<Integer>> map, int[] timeArr) {
    List<Integer> list = map.getOrDefault(index, new ArrayList<>());
    // 6、如果当前任务没有依赖,表示该任务可以立即启动,将其最小启动时间设置为1,并返回1,停止递归
    if (list.size() == 0) {
        //最小启动时间
        timeArr[index] = 1;
        return 1;
    }

    int minDependTime = Integer.MIN_VALUE;
    
    // 7、遍历当前任务依赖的任务列表,递归调用getMinTime函数来获取依赖任务的最小启动时间,
    // 取其中的最大值作为当前任务的最小启动时间minDependTime
    for (int taskNum : list) {
        // 通过递归取最小启动时间
        if (timeArr[taskNum] == 0) {
            timeArr[taskNum] = getMinTime(taskNum, map, timeArr);
        }
        minDependTime = Math.max(minDependTime, timeArr[taskNum]);
    }
    
    // 8、当前任务的最小启动时间为依赖任务的最小启动时间加1,将该值记录到timeArr数组中,并返回该值
    int needTime = minDependTime + 1;
    timeArr[index] = needTime;
    return needTime;
}

六、效果展示

1、输入

5
5
0 4
1 2
1 3
2 3
2 4

2、输出

3

3、说明

有5个部署任务项,5个依赖关系,如下图所示。我们可以先同时部署任务项0和任务项1,然后部署任务项2,最后同时部署任务项3和任务项4。最短开站时间为3。

在这里插入图片描述


🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597111.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

细看SLMi823x系列SLMi8233BD双通道隔离驱动在 OBC 上的典型应用

数明深力科SLMi823x系列SLMi8233BD隔离驱动技术优势&#xff1a;具有高性能、高性价比、高可靠性的产品特性&#xff0c;应用覆盖UPS、充电桩、服务器电源、通信电源、新能源汽车动力总成系统的车载 OBC 领域。通过CQC认证的。 车载充电器&#xff08;OBC&#xff09;是电动汽…

如何研究带有不可微项的目标函数的局部极小值?

以optimtool的算法为例来解释 在Python >3.7的编程环境下&#xff0c;按如下方式下载optimtool&#xff0c;一个基于符号微分与数值近似的优化方法库&#xff1a; pip install optimtool --upgrade pip install optimtool>2.4.2目前没有为目标函数中不可微项增加预处理…

golang http请求封装

http请求封装在项目中非常普遍&#xff0c;下面笔者封装了http post请求传json、form 和get请求&#xff0c;以备将来使用 1、POST请求 1.1、POST请求发送 json 这里发送json笔者使用了2种方式&#xff0c;一种是golang 自带的 http.Post方法&#xff0c;另一是 http.NewReq…

iphone苹果手机如何备份整个手机数据?

手机上的数据变得越来越重要&#xff0c;大家也越来越注重数据安全。如果手机设备丢失的话&#xff0c;不仅是设备的丢失&#xff0c;还是数据的丢失。因此&#xff0c;备份数据就显得很重要。那么&#xff0c;iphone如何备份整个手机&#xff0c;苹果怎么查备份的照片&#xf…

14.3:给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中字典序最小的结果

给定一个由字符串组成的数组strs&#xff0c;必须把所有的字符串拼接起来&#xff0c;返回所有可能的拼接结果中字典序最小的结果 贪心写法 首先注意的一点是&#xff1a;如果两个字符串的长度相同&#xff0c;“abc”&#xff0c;“abd”&#xff0c;肯定是“abc”的字典序最…

15.2:分金条的最小代价

一块金条切成两半&#xff0c;是需要花费和长度数值一样的铜板 比如长度为20的金条&#xff0c;不管怎么切都要花费20个铜板&#xff0c;一群人想整分整块金条&#xff0c;怎么分最省铜板? 例如&#xff0c;给定数组{10,20,30}&#xff0c;代表一共三个人&#xff0c;整块金条…

情绪管理ABC法

情绪管理ABC法 是由著名心理学家艾利斯&#xff08;Albert Ellis&#xff09;提出的一种情绪管理方法。 模型介绍 情绪&#xff0c;不取决于发生的事实&#xff0c;取决于我们如何看待这件事ABC理论认为&#xff0c;我们的情绪©&#xff0c;其实与发生的事件(A)无关&…

亚马逊云科技赋能敦煌网集团上云,云上新架构带来价值

敦煌网成立于2004年&#xff0c;是领先的B2B跨境电子商务交易平台&#xff0c;敦煌网在品牌优势、技术优势、运营优势、用户优势四大维度上&#xff0c;已建立起竞争优势。随着跨境电商的日趋成熟&#xff0c;经营范围持续扩大、品类和渠道的增加&#xff0c;以及AIGC等行业新技…

Java程序猿搬砖笔记(十三)

文章目录 MySQL数据库生成自动增长序号MySQL修改密码SpringBoot定时任务解决Mybatis出现的各种Parameter not found. Available parameters are [ , ]Mybatis的foreach标签遍历mapSpringBoot项目打包SpringBoot Async使用注意事项Spring Cloud Config bootstrap文件&#xff…

内蒙古自治区出台加快充换电基础设施建设实施方案

摘要&#xff1a;为深入贯彻落实《国务院办公厅关于印发新能源汽车产业发展规划&#xff08;2021—2035年&#xff09;的通知》&#xff08;国办发 ﹝2020﹞39号&#xff09;、《国家发展改革委等部门关于进一步提升电动汽车充电基础设施服务保障能力的实施意见》&#xff08;发…

杭州久斗贸易有限公司官网上线 | LTD酒水行业案例分享

​一、公司介绍 杭州久斗贸易有限公司是集现代化电子商务与传统销售网络于一体的新兴企业。成立于2022年12月&#xff0c;是杭州地区一家专业的酒类销售贸易公司。 公司股东及经营者拥有二十年以上国内名酒销售经验&#xff0c;目前主营茅台.五粮液等高端白酒批发业务&am…

halcon matlab 中pose matrix之间的转换

pose_to_hom_mat3d (TransPose, HomMat3D) 原理&#xff1a; matlab 验证&#xff1a; function [a,b]getMatrix(pose) syms x y z; xdeg2rad(pose(4)); ydeg2rad(pose(5)); zdeg2rad(pose(6)); mat_x[1 0 0 0;0 cos(x) -sin(x) 0;0 sin(x) cos(x) 0; 0 0 0 1]; mat_…

Object.defineProperty到底有啥用

Object.defineProperty Object.defineproperty 的作用就是直接在一个对象上定义一个新属性&#xff0c;或者修改一个已经存在的属性 使用Object.defineProperty之前 number和person之间并无关联 使用Object.defineProperty之后 person和number之间有了关联&#xff1b;修…

1164 Good in C(38行代码+超详细注释)

分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 When your interviewer asks you to write "Hello World" using C, can you do as the following figure shows? Input Specification: Each input file contains one test case. For each case, the …

Ceph 分布式存储

Ceph概述 存储基础 单机存储设备 ●DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; IDE、SATA、SCSI、SAS、USB 接口的磁盘 所谓接口就是一种存储设备驱动下的磁盘设备&#xff0c;提供块级别的存储 ●NAS&#xff08;网络附加存…

jwt----介绍,原理

token&#xff1a;服务的生成的加密字符串&#xff0c;如果存在客户端浏览器上&#xff0c;就叫cookie -三部分&#xff1a;头&#xff0c;荷载&#xff0c;签名 -签发&#xff1a;登录成功&#xff0c;签发 -认证&#xff1a;认证类中认证 # jwt&…

火伞云全球节点分布国家及城市列表

火伞云融合CDN划分为中国境内和中国境外两个服务区域。 中国境内区域为中国大陆全地区统一计费&#xff08;不含港澳台&#xff09;&#xff0c;全球用户访问均会调度至中国内地加速节点进行服务。 中国境外区域&#xff0c;按CDN 节点服务器所在地区&#xff0c;划分为北美地…

uni-app使用echarts绘制数据可视化图

先打开项目 然后选择 使用命令行窗口打开所在目录(U) 在弹出的终端中输入指令来引入依赖 npm install echarts然后 我们 打开echarts的官网 点击这里这个 示例 找一个自己喜欢的案例点进去 我这里就用一个最简单的吧 代码看着不会乱 将他这个 option中的内容复制出来 然后…

重塑未来:科技创新驱动社会变革

科技创新驱动社会变革 前言正文一、人工智能&#xff08;AI&#xff09;&#xff1a;智能技术的崛起二、区块链技术&#xff1a;去中心化的数字经济三、量子计算&#xff1a;开启未来的大门四、生物技术&#xff1a;拓展医学与农业的边界 总结 前言 近年来&#xff0c;科技领域…