华为OD机试 - 高效的任务规划 - 逻辑分析(Java 2023 B卷 200分)

news2024/11/26 16:53:11

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

你有 n 台机器,编号为 1~n,每台都需要完成一项工作,机器经过配置后都能完成独 立完成一项工作。

假设第 i 台机器你需要花 B 分钟进行设置,然后开始运行,J 分钟后完成任务。

现在,你需要选择布置工作的顺序,使得用最短的时间完成所有工作。

注意,不能同时对两台进行配置,但配置完成的机器们可以同时执行他们各自的工作。

二、输入描述

第一行输入代表总共有 M 组任务数据 (1<M<=10)。

每组数第一行为一个整数指定机器的数量 N (0<N<=1000)。

随后的 N 行每行两个整数,第一个表示 B (0<=B<=10000),第二个表示 J (0<=J<=10000)

每组数据连续输入,不会用空行分隔。各组任务单独计时。

三、输出描述

对于每组任务,输出最短完成时间,且每组的结果独占一行。

四、解题思路

题意要求:

不能同时对两台进行设置,并且 输出最短完成时间。

理解为:

  1. 执行时间越长的机器,越先设置,完成时间越短;
  2. 如果执行时间相等,设置时间越短,就会越先执行,完成时间越短;
  3. 当前机器的执行时间如果大于后面所有机器的设置时间,得到额外执行时间;
  4. 再对所有机器的额外执行时间进行比较,取最大值,再加上所有设置时间,即总运行时间;

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // m组任务
    int m = Integer.valueOf(sc.nextLine());
    StringJoiner stringJoiner = new StringJoiner("\n");
    for (int i = 0; i < m; i++) {
        // n台机器
        int n = Integer.valueOf(sc.nextLine());
        List<String> list = new ArrayList<>();
        for (int j = 0; j < n; j++) {
            list.add(sc.nextLine());
        }

        // 总设置时长
        int allSetTime = 0;

        /**
         * 不能同时对两台进行设置,并且 输出最短完成时间
         * 执行时间越长的机器,越先设置,完成时间越短
         * 如果执行时间相等,设置时间越短,就会越先执行,完成时间越短
         */
        List<String> sortList = list.stream().sorted(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                String[] arr1 = o1.split(" ");
                String[] arr2 = o2.split(" ");
                if (arr1[1].equals(arr2[1])) {
                    return arr1[0].compareTo(arr2[0]);
                } else {
                    return arr2[1].compareTo(arr1[1]);
                }
            }
        }).collect(Collectors.toList());
        System.out.println(list);
        System.out.println(sortList);

        /**
         * 当前机器的执行时间如果大于后面所有机器的设置时间,得到额外执行时间
         * 再对所有机器的额外执行时间进行比较,取最大值,再加上所有设置时间,即总运行时间
         *
         * [2 3, 4 3, 1 1]
         * [2 3, 4 3, 1 1]
         * 设置2,执行3  剩余执行3   设置4,执行3  剩余执行3     设置1,执行1   剩余最大执行2
         * 2                          +  4                       +1                +2   = 9
         */
        int[] runLeftTimeArr = new int[n];
        for (int j = 0; j < sortList.size(); j++) {
            String[] temp = sortList.get(j).split(" ");
            Integer currentSetTime = Integer.valueOf(temp[0]);
            // 当前机器的执行时间
            Integer currentRunTime = Integer.valueOf(temp[1]);
            // 总设置时长
            allSetTime += currentSetTime;

            for (int k = 0; k < j; k++) {
                if (runLeftTimeArr[k] > 0) {
                    runLeftTimeArr[k] -= currentSetTime;
                }
            }
            runLeftTimeArr[j] = currentRunTime;
        }

        int runLeftMax = 0;
        for (int j = 0; j < runLeftTimeArr.length; j++) {
            if (runLeftTimeArr[j] > runLeftMax) {
                runLeftMax = runLeftTimeArr[j];
            }
        }
        stringJoiner.add(allSetTime + runLeftMax+"");
    }
    System.out.println(stringJoiner);
}

六、效果展示

1、输入

1
3
1 1
4 3
2 3

2、输出

9

3、说明

  1. 先按执行时间降序排序,[4 3, 2 3, 1 1];
  2. 如果执行时间相同,再按设置时间升序排序,[2 3, 4 3, 1 1];
[2 3, 4 3, 1 1]
设置2,执行3  剩余执行3   设置4,执行3  剩余执行3     设置1,执行1   剩余最大执行2
2                          +  4                       +1                +2   = 9
  1. 机器1设置时间2,机器1剩余执行时间3;
  2. 机器2设置时间4,设置时机器1会执行完毕,机器2剩余执行时间3;
  3. 机器3设置时间1,机器2会执行1,机器2的剩余执行时间2,机器3的剩余执行时间1;
  4. 都设置完毕后,获取每一台机器的剩余执行时间,获取其最大值;
  5. 总设置时间 + 剩余最大执行时间 = 总的时间

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

操作系统(一):进程状态与进程调度

前言 操作系统作为计算机基础的四大件&#xff0c;系统学习无疑是十分重要的。在这个系列的文章中&#xff0c;荔枝会结合操作系统的知识进行归纳梳理&#xff0c;总结输出博文&#xff01;下面这篇文章主要介绍的是进程状态和调度&#xff0c;重点是几种调度算法的理解和掌握&…

基于yolov2网络的人脸识别系统matlab仿真,包括识别正脸,侧脸等

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、训练阶段 4.2、预处理阶段 4.3、识别阶段 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ........................................…

数据中心加密:保障数据安全的重要一环

随着信息化的快速发展&#xff0c;数据已经成为企业的重要资产&#xff0c;数据安全也成为了企业面临的重大挑战。数据中心作为企业数据存储和管理的重要场所&#xff0c;其安全性对于整个企业的数据安全具有至关重要的作用。而数据中心加密则是保障数据安全的重要一环。本文将…

15 款 PDF 编辑器帮助轻松编辑、合并PDF文档

PDF 编辑器在当今的数字环境中至关重要&#xff0c;因为 PDF 已成为共享和存储信息的首选格式。只需几分钟&#xff0c;可靠的 PDF 编辑器即可让用户能够根据其特定需求修改、定制和定制文档。在本文中&#xff0c;我们全面汇编了 15 款最佳免费 PDF 编辑器&#xff0c;让您可以…

1.性能优化

概述 今日目标&#xff1a; 性能优化的终极目标是什么压力测试压力测试的指标 性能优化的终极目标是什么 用户体验 产品设计(非技术) 系统性能(快&#xff0c;3秒不能更久了) 后端&#xff1a;RT,TPS,并发数 影响因素01&#xff1a;数据库读写&#xff0c;RPC&#xff…

详解 SpringMVC 的 HttpMessageConverter

文章目录 前言参考资料内容1、[RequestBody ](/RequestBody )2、RequestEntity3、[ResponseBody ](/ResponseBody )4、SpringMVC处理json5、SpringMVC处理ajax6、RestController注解7、ResponseEntity 推荐读物 《Spring Boot微服务实战(第2版)》内容简介目录 前言 HttpMessag…

Vue3:解决基地址不同 数据交互http与https跨域问题

配置公共管理的api文件和vue.config.js可以解决跨域问题。一个项目对接不同的基地址和接口同理。 api export default {//接口基地址Millia: process.env.NODE_ENV development ? location.protocol // location.host /milliaApi : http://xx.xxx.xxxx/index.php/,Milli…

墨者学院 内部文件上传系统漏洞分析溯源

打开web页面&#xff1a; 是个文件上传&#xff0c;先随便上传一个 txt 文件并抓包&#xff1a; 木马文件&#xff1a; <%eval request ("123")%>发现是个 IIS&#xff0c;并且给了文件的上传路径 upload&#xff0c;那就尝试上传 asp 一句话&#xff0c;直接…

C 练习实例10 打印楼梯,同时在楼梯上方打印两个笑脸。

题目&#xff1a;打印楼梯&#xff0c;同时在楼梯上方打印两个笑脸。 程序分析&#xff1a;用 ASCII 1 来输出笑脸&#xff1b;用i控制行&#xff0c;j来控制列&#xff0c;j根据i的变化来控制输出黑方格的个数。 如果出现乱码情况请参考【C 练习实例7】的解决方法。 实例 …

Ribbon讲解

一&#xff1a;Ribbon是什么&#xff1f;

记住这个考勤小技巧,快速搞定煤矿员工管理!

人脸识别技术一直以来都是一项备受关注的研究领域。传统的二维人脸识别技术主要依赖于平面照片或视频图像&#xff0c;但这些方法受到光照、角度和遮挡等因素的干扰&#xff0c;容易出现误识别问题。 为了克服这些挑战&#xff0c;三维人脸识别技术应运而生&#xff0c;来捕获更…

iOS自动化测试方案(四):保姆级搭建iOS自动化开发环境

文章目录 一、基础环境准备1.1、MacOS虚拟机 二、iPhone虚拟机三、MacOS虚拟机连接iphone真机四、扩展&&问题4.1、如果appium启动app失败&#xff0c;可能是appium driver没有安装xcuitest插件4.2、下载并安装Appium服务端&#xff0c;inspector元素定位器4.3、下载app…

YOLOv8-Seg改进:动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

🚀🚀🚀本文改进:动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLOv8-Seg,与C2f结合实现二次创新 🚀🚀🚀Dynamic Snake Convolution亲测在番薯破损分割任务中,mask mAP@0.5 从原始的0.625提升至0.645 🚀🚀🚀YOLOv8-seg创新专…

数据库脚本执行工具

一、功能介绍 很多系统运行都依托数据库&#xff0c;不少IDE让开发实现快速开发的同时&#xff0c;也提供了方便快捷的打包工具。例如&#xff1a; Visual Studio集成的 Install Shield、Wix Toolkit; Android Studio 集成的 Gradle 等等&#xff0c;这些集成的打包工具&…

下载git步骤

文章目录 导文1.软件下载2.git安装3.测试git 导文 下载git的详细步骤 1.软件下载 可以自己去网上下载&#xff0c;根据自己电脑的系统类型是多少位的&#xff0c;去下载对应的安装包。 下载地址&#xff1a;Git - Downloads 根据自己的 操作系统进行选择&#xff0c;按需选择…

编码器类型说明

目录 光电编码器 磁性编码器 电容式编码器 对比优缺点 编码器在运动控制类产品中比较常见&#xff0c;旋转编码器都是组成运动控制反馈回路的关键元器件&#xff0c;包括工业自动化设备和过程控制、机器人技术、医疗设备、能源、航空航天等。 作为将机械运动转换为电信号的…

ChinaSoft 论坛巡礼 | 系统与网络安全论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

xv6实验课程--xv6的写时复制fork(2023)

7. xv6实验课程--xv6的写时拷贝(COW)(2021) 7. xv6实验课程--xv6懒惰分页分配&#xff08;lazy)(2020) 本文来源&#xff1a; https://mp.weixin.qq.com/s/XJkhjrlP232ZDsRyXd0oHQ 已完成的实验代码可以从下列网站获取&#xff1a; git clone https://gitee.com/lhwhit196…

【C语言基础教程】函数指针与指针大小

文章目录 前言一、函数指针1.1 函数指针的概念1.2 三个示例代码示例1: 使用函数指针调用不同的函数示例 2: 使用函数指针实现回调函数示例 3: 使用函数指针数组 二、指针的大小2.1 前述2.2 指针大小如何决定&#xff1f;两方面理解 总结 前言 在C语言中&#xff0c;指针是一项…

腾讯云香港服务器购买多少钱一年?288元

香港云服务器可以选择腾讯云香港地域的轻量应用服务器&#xff0c;轻量2核2G配置、20M峰值带宽、40G SSD系统盘&#xff0c;优惠价格24元一个月&#xff0c;Linux系统是288元一年&#xff0c;Windows系统是360元一年&#xff0c;腾讯云百科txybk.com分享腾讯云香港轻量应用服务…