华为OD题目: 快速开租建站

2023-10-26

华为OD题目: 快速开租建站

知识点 BFSQ搜索拓扑排序
时间限制: 1s 空间限制: 256MB 限定语言: 不限
题目描述:
当前IT部门支撑了子公司颗粒化业务,该部门需要实现为子公司快速开租建站的能力,建站是指在一个全新的环境部署一套IT服务。
每个站点开站会由一系列部署任务项构成,每个任务项部署完成时间都是固定和相等的,设为1。部署任务项之间可能存在依赖,假如任务2依赖任务1,
那么等任务1部署完,任务2才能部署。任务有多个依赖任务则需要等所有依赖任务都部署完该任务才能部署。
没有依赖的任务可以并行部署,优秀的员工们会做到完全并行无等待的部署。
给定一个站点部署任务项和它们之间的依赖关系,请给出一个站点的最短开站时间。

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

输出描述:
个整数,表示一个站点的最短开站时间
补充说明:
1<taskNum<=100
1=<relationsNum<=5000

示例1
输入:
5
5
0 4
1 2
1 3
2 3
2 4
输出:
3

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

示例2
输入:
5
3
0 3
0 4
1 3

输出:
2

解题思路:

  • 可以用深度优先的方式来做,本题可以理解为取所有任务里,启动时间最长的一个
  • for循环的时候,依次取getMinNeedTime(taskNum),取其中最大的一个
  • 在 getMinNeedTime(taskNum)方法中,会对当前(taskNum)所依赖的递归调用此方法,
  • 为了避免重复递归,用一个taskMinTimes数组保存每个任务的最小启动时间
public class My {

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

        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < relationsNum; i++) {
            String line = sc.nextLine();
            String[] strings = line.split(" ");
            int left = Integer.parseInt(strings[0]);
            int right = Integer.parseInt(strings[1]);
            List<Integer> list = map.getOrDefault(left, new ArrayList<>());
            list.add(right);
            map.put(left, list);
        }
        int[] taskMinTimes = new int[taskNum];

        int res = 0;
        for (int i = 0; i < taskNum; i++) {
            int needTime = getMinNeedTime(i, map, taskMinTimes);
            res = Math.max(res, needTime);
        }
        System.out.println(res);
    }

    //获取当前任务启动所需时间,就是所有依赖的任务里面时间最多的一个,为了减枝,用一个数组记录任务的最小启动时间
    public static int getMinNeedTime(int currNum, Map<Integer, List<Integer>> map, int[] taskMinTimes) {
        List<Integer> list = map.getOrDefault(currNum, new ArrayList<>());
        if (list.size() == 0) {
            //记录当前task任务所需的时间
            taskMinTimes[currNum] = 1;
            return 1;
        }

        int minDependTime = Integer.MIN_VALUE;
        for (int taskNum : list) {
            //先看看任务数组有没有值,如果数组里还没记录最小启动时间,那么递归获取,否则,如果已经有了,直接进行下面的比较
            if (taskMinTimes[taskNum] == 0) {
                taskMinTimes[taskNum] = getMinNeedTime(taskNum, map, taskMinTimes);
            }
            minDependTime = Math.max(minDependTime, taskMinTimes[taskNum]);
        }
        int needTime = minDependTime + 1;
        //记录当前task任务所需的时间
        taskMinTimes[currNum] = needTime;
        return needTime;

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为OD题目: 快速开租建站 的相关文章

  • 如何降级旧版 Android 中的 java.time 代码?

    我有这个简洁的代码 它生成两个日期之间的天数列表 然后是当天的日期 以及它在列表中的位置 最重要的是 所有日期都采用相同的格式 这使得很容易比较它们 Create list of days String s 2018 08 28 Strin
  • 如何从嵌套 Jar 中提取 .class 文件?

    我有一个名为 的 Jar 文件外部Jar jar 其中包含另一个名为 的罐子内Jar jar 此 InnerJar 包含 2 个名为 的文件测试1 类 测试2 类 现在我想提取这两个文件 我尝试了一些代码 但它不起作用 class Nest
  • java对象间通信

    还在学习Java Swing 又让我问了这个问题 但这确实是一个普遍的面向对象问题 如果我有一个主类 包含 main 它会创建一个执行某些操作的新对象 A 主类现在具有对该对象的引用 对象 B 如何访问该对象的属性 我能想到的唯一方法是让主
  • Java:在 E4X 中解析 XML 的方法?

    我想知道是否有一种方法可以使用 E4X 或类似于 E4X 的方法来解析 XML 这样的框架 库存在吗 Thanks 您可以将 JavaScript 引擎 Rahino 与 Java 一起使用 它可以处理 E4X http blogs ora
  • 按日期比较对象(实现 Comparator)

    我有一个 java People 对象 public class People String lastname String firstname String gender String datebirth String fcolor pu
  • 用多态性替换条件式

    我试图通过一个例子来理解这种干净的代码实践 考虑具有折扣开关盒的类产品 我正在尝试用多态性替换 switch 语句 代码之前 class Product String priceCode int discount Product Strin
  • java.lang.IllegalArgumentException:由于密钥无效而无法初始化

    我遇到加密异常 我在跑 操作系统 X 10 11 爪哇1 8 Groovy 版本 2 4 4 摇篮2 3 20141027185330 0000 JAVA HOME Library Java JavaVirtualMachines jdk1
  • 该项目使用Gradle 2.10,与Android Studio 2020.3不兼容

    在向 udacity 学习 android studio 时 他们要求我下载一个项目 我这样做了 但是当我将其导入 android studio 时 我收到一条错误消息 该项目使用的 Gradle 2 10 与 Android Studio
  • “IF”语句中的 Java 布尔值不起作用 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 不幸的是
  • 多次或单次 Try Catch [重复]

    这个问题在这里已经有答案了 我正在清理一些代码 但我不确定哪条路线更好 目前 我的大部分方法都有一个 try catch 块 它在最后处理一些单独的异常 但我认为有更多的 try catch 块对于维护来说会更好 然而 在分解代码时 我发现
  • Hazelcast 可序列化映射 ClassNotFound 异常

    我正在尝试在一个简单的 Web 应用程序中实现 Hazelcast 我正在尝试将自定义对象存储到我的 Hazelcast Map 中 并在我的 Bid 对象类中实现 Serialized 并进行必要的导入 import java io Se
  • 适用于任何支付网关的购物车 API? (至少需要支付宝)

    我正在尝试找到一个基于 java 的 API 它至少包含处理信用卡交易或通过 PayPal 购买的详细信息 以及其他网关以 IPN 方式作为附加功能 即不需要产品 只需发票金额 作为一点简化 我认为我应该能够执行类似以下伪代码的操作 sho
  • 如何使用JPA从表中获取多列?

    例如我有一张桌子Student它包含像这样的列id name age我正在通过使用恢复特定列值原生查询像下面这样 Query query entityManager createNativeQuery SELECT age FROM Stu
  • 来自远程客户端的 websphere jms 队列访问

    背景我是 php 和前端 Web 开发人员 使用 Netbeans 开发 Java 应用程序 从 websphere 我认为是 V8 5 JMS 队列中读取数据 然后向适当的脚本 服务器发出命令 这是我大约 10 年来第一次主要接触 Jav
  • 数独回溯 无效数独

    我创建了一个数独回溯求解器 它工作得很好 但现在如果数独无法解决 我想给出一个错误 因为它无效 例如 如果给出这个数独 http img5 imageshack us img5 2241 sudokugq jpg http img5 ima
  • 如何使用 appium 为 ui 选择器正确安装 test-ai-classifier 插件?

    遇到的问题是在ubuntu 20 04上 按照指示进行操作https github com testdotai appium classifier plugin https github com testdotai appium class
  • 在自己的构造函数中调用 thread.start() [重复]

    这个问题在这里已经有答案了 线程在自己的构造函数中调用 this start 是否合法 如果是的话 这会导致什么潜在问题 我知道在构造函数运行完成之前该对象不会完全初始化 但除此之外还有其他问题吗 出于内存安全的原因 您不应从其构造函数内向
  • 如何使用 Selenium WebDriver 和 Java 单击按钮?

    以下是按钮的 HTML 代码 span span
  • ServerEndpoint 和 web.xml

    我有一些 Soap REST servlet 现在还有一个 WebSocket ServerEndpoint game public class WebSocketgame 我有下一个麻烦 如果 web xml 存在 WebSocket 不
  • 在 Scala 中,如何使用多个构造函数子类化 Java 类?

    假设我有一个带有多个构造函数的 Java 类 class Base Base int arg1 Base String arg2 Base double arg3 如何在 Scala 中扩展它并仍然提供对 Base 的所有三个构造函数的访问

随机推荐

  • 机器学习——模型评估

    在学习得到的模型投放使用之前 通常需要对其进行性能评估 为此 需使用一个 测试集 testing set 来测试模型对新样本的泛化能力 然后以测试集上的 测试误差 tootino error 作为泛化误差的近似 我们假设测试集是从样本真实分
  • Shiro

    文章目录 资料 概念 基本功能 架构原理 登录认证 概念 流程 角色授权 概念 流程 代码 大致流程 shiro配置解读 ShiroConfig 登录 认证 授权 详细代码 pom login html index html UserCon
  • 表面缺陷检测的几种方法

    1 location blob feature 2 location differ feature 3 frequency domain spatial domain 4 photometric stereo 5 calibration f
  • python之迷你版Httpd服务器

    miniHttpd py import os sys platform import posixpath import BaseHTTPServer from SocketServer import ThreadingMixIn impor
  • 软件测试的心理学和经济学、软件测试的原则

    软件测试的艺术 读书笔记 第二章 第二章 软件测试的心理学和经济学 前言 软件测试是一项技术性工作 但同时涉及经济学和人类心理学的一些重要因素 在理想情况下 我们会测试程序的所有可能执行情况 而在大多数情况下 这几乎是不可能的 即使是一个简
  • 荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

    文章目录 前言 一 配置 buildroot 及编译 二 写 QT 代码 三 编译可执行文件 四 拷贝到 SD 卡 五 上板子测试 六 资源自取 前言 有这样一个需求 通过配置 QT 在 linux 下实现显示我所想要显示的图片 实现的方式
  • 首页生成静态的html,关于网站生成静态html文件的两种方案思考

    关于网站生成静态文件有利有弊 通常来讲交互性的站点不太适合静态化 如社交网站 论坛之类的站点等等 如果以资讯内容展示为主 生成静态文件能够很好的提高服务器吞吐量 下面提供两种生成静态文件的方案 分析下其中的利和弊 1 后台增加生成静态页面功
  • hexo博客配置

    title hexo博客配置 cover img 2 jpg categories HEXO博客 1 网站图标更换 themes hexo theme Annie layout partial head ejs 我中间这个hexo them
  • NUC980开源项目8-官方Uboot编译

    上面是我的微信和QQ群 欢迎新朋友的加入 项目码云地址 国内下载速度快 https gitee com jun626 nuc980 open source project 项目github地址 https github com Jun117
  • linux XFRM整体框架简单分析

    author jonathan 本文档的CopyRight归jonathan所有 可自由转载 转载时请保持文档的完整性 Linux 的 XFRM框架多简单阿 6年前整理过 到现在还记得基本原理 说明xfrm设计的是多么简单明了 不过网上都是
  • Selenium被禁止的解决方法

    selenium被禁止的解决方法 遇到问题 selenium做爬虫能解决很多反爬问题 但是selenium也有很多特征可以被识别 比如用selenium驱动浏览器后window navigator webdriver值是true 而正常运行
  • python print format_Python format()格式化输出方法详解

    前面章节介绍了如何使用 操作符对各种类型的数据进行格式化输出 这是早期 Python 提供的方法 自 Python 2 6 版本开始 字符串类型 str 提供了 format 方法对字符串进行格式化 本节就来学习此方法 format 方法的
  • canvas详解03-绘制图像和视频

    canvas 更有意思的一项特性就是图像操作能力 可以用于动态的图像合成或者作为图形的背景 以及游戏界面 Sprites 等等 浏览器支持的任意格式的外部图片都可以使用 比如 PNG GIF 或者 JPEG 你甚至可以将同一个页面中其他 c
  • Tensorflow和anaconda的历史版本镜像,清华源镜像下载地址

    清华源镜像下载地址 https pypi tuna tsinghua edu cn simple tensorflow gpu tensorflow和cuda版本对应关系见该博客https blog csdn net qq 27825451
  • HCIA综合实验(以华为eNSP为例)

    如有错误 敬请谅解 此文章仅为本人学习笔记 仅供参考 如有冒犯 请联系作者删除 基础知识简介 网络技能树技能树https edu csdn net skill network utm source AI act network catego
  • android 功能模块之通讯模块

    Android通讯录开发之实现全选 反选功能 2014年1月15日 实现全选 反选不是什么难的事情 就只是用另外一个数据结构来存储被选中的状态 通过刷新列表来更新列表的显示状态 下面是实现效果 定义一个散列表来存储选中状态 java vie
  • 电机PID调试

    电机PID调试 电机PID调试 一 直流电机原理与TB6612 1 1 电机原理 1 2 减速器作用 1 3 电机实物接线图 1 4 电机控制芯片 二 编码器使用以及测速原理 2 1 编码器原理 2 1 编码器接线 2 1 编码器软件四倍
  • Matlab——m_map指南(2)

    3 海岸线和深度测量 3 1 1 海岸线选项 m coast line optional line arguments m coast line optional line arguments m map 的海岸线数据可以使用m coast
  • 锦囊2—修改已经存在了的ES数据结构

    修改已经存在了的ES数据结构 问题背景 由于ElasticSearch没有像mysql一样可以直接字段数据类型的方法 因此需要通过创建中间索引 data index 1 备份数据到中间索引 data index 1 然后删除原索引 data
  • 华为OD题目: 快速开租建站

    华为OD题目 快速开租建站 知识点 BFSQ搜索拓扑排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 当前IT部门支撑了子公司颗粒化业务 该部门需要实现为子公司快速开租建站的能力 建站是指在一个全新的环境部署一套IT服务