华为OD机试真题—— 流水线(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

news2025/5/28 0:00:40

在这里插入图片描述

2025 B卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《流水线》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:流水线


知识点:排序、贪心算法(最小堆)
时间限制:1秒
空间限制:256MB
限定语言:不限


题目描述

一个工厂有 m 条流水线,用于并行完成 n 个独立作业。调度系统在安排作业时,优先执行处理时间最短的作业
n > m 时,处理时间最短的 m 个作业先进入流水线,其余作业等待。当某流水线作业完成后,从剩余作业中选择最短的补入。
要求计算处理完所有作业的总耗时。


输入描述

  • 第一行为两个整数(空格分隔),表示流水线个数 m 和作业数 n
  • 第二行为 n 个整数(空格分隔),表示每个作业的处理时长 t1, t2, ..., tn
  • 取值范围:0 < m, n < 1000 < t1, t2...tn < 100

输出描述

输出处理完所有作业的总时长。


示例

输入

3 5  
8 4 3 2 10  

输出

13  

说明

  1. 初始分配最短的 3 个作业 2,3,4 进入流水线。
  2. 流水线1完成时间 2,补入剩余最短作业 8
  3. 流水线2完成时间 3,补入剩余作业 10
  4. 最终最长耗时为 3 + 10 = 13

Java

问题分析

我们需要调度多个作业到流水线,使得总耗时最短。每个流水线同一时间只能处理一个作业,且优先分配给处理时间最短的作业。总耗时由所有流水线中耗时最长的决定。

解题思路

  1. 排序作业:先将所有作业按处理时间从小到大排序。
  2. 贪心分配:使用最小堆模拟流水线,每次选择当前总时间最小的流水线,分配下一个最短作业。
  3. 计算总耗时:最后所有流水线的总时间中的最大值即为答案。

代码实现

import java.util.*;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt(); // 流水线数量
        int n = scanner.nextInt(); // 作业数量
        int[] tasks = new int[n]; // 存储每个作业的处理时间
        for (int i = 0; i < n; i++) {
   
            tasks[i] = scanner.nextInt();
        }
        Arrays.sort(tasks); // 按处理时间升序排列

        PriorityQueue<Integer> pq = new PriorityQueue<>(); // 最小堆,存储各流水线当前总时间
        int initialJobs = Math.min(m, n); // 初始分配的作业数(不超过流水线数)
        for (int i = 0; i < initialJobs; i++) {
   
            pq.add(tasks[i]); // 初始作业分配给流水线
        }

        // 处理剩余的作业(当n > m时)
        for (int i = m; i < n; i++) {
   
            int earliestEnd = pq.poll(); // 取出当前最早空闲的流水线
            earliestEnd += tasks[i]; // 分配新作业到该流水线
            pq.add(earliestEnd); // 将新总时间重新加入堆
        }

        // 找到堆中的最大总时间,即为总耗时
        int maxTime = 0;
        while (!pq.isEmpty()) {
   
            maxTime = Math.max(maxTime, pq.poll());
        }
        System.out.println(maxTime);
    }
}

代码解析

  1. 输入处理:读取流水线数 m、作业数 n 及每个作业的处理时间存入数组。
  2. 排序作业:将作业按处理时间从小到大排序,确保优先分配最短作业。
  3. 初始化堆:将前 m 个(或全部作业如果少于 m)作业直接加入最小堆,表示初始分配的流水线时间。
  4. 处理剩余作业:对于后续作业,每次从堆中取出当前总时间最小的流水线,加上新作业时间后重新插入堆,动态调整流水线负载。
  5. 计算总耗时:遍历堆中的总时间,取最大值即为所有作业完成的总耗时。

示例测试

示例输入1

3 5  
8 4 3 2 10  

输出113
解析:初始分配 2、3、4 → 流水线时间 [2,3,4]。剩余作业 8 → 2+8=10,队列变为 [3,4,10]。作业 10 → 3+10=13,队列变为 [4,10,13]。最大时间为13。

示例输入2

2 4  
1 2 3 4  

输出26
解析:初始分配 1、2 → 流水线时间 [1,2]。剩余作业 3 → 1+3=4,队列 [2,4]。作业4 → 2+4=6。最大时间6。

示例输入3

5 3  
5 3 1  

输出35
解析:初始分配 1、3、5 → 最大时间5(无需处理后续作业)。

综合分析

  • 时间复杂度:O(n log n) 来自排序,O(n log m) 来自堆操作,总体 O(n log n)。
  • 空间复杂度:O(m) 用于存储堆,m ≤ 100,空间高效。
  • 贪心选择正确性:每次选择最短作业分配到最早空闲流水线,确保总耗时最小。
  • 适用性:适用于作业调度、资源分配等场景,高效处理大规模数据。

python

问题分析

本问题要求将多个作业调度到流水线,使得所有作业完成的总时间最短。流水线按处理时间最短优先分配作业,总耗时由最长完成时间的流水线决定。


解题思路

  1. 排序作业:将作业按处理时间从小到大排序,确保优先分配最短作业。
  2. 贪心调度:使用最小堆维护当前流水线的完成时间,每次选取最早空闲的流水线分配新的最短作业。
  3. 计算总耗时:最终所有流水线的完成时间中的最大值即为答案。

代码实现

import heapq

def main():
    # 读取输入
    m, n = map(int, input().split())
    tasks = list(

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

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

相关文章

【数据架构01】数据技术架构篇

✅ 9张高质量数据架构图&#xff1a;大数据平台功能架构、数据全生命周期管理图、AI技术融合架构等&#xff1b; &#x1f680;无论你是数据架构师、治理专家&#xff0c;还是数字化转型负责人&#xff0c;这份资料库都能为你提供体系化参考&#xff0c;高效解决“架构设计难、…

【数据集】30 m地表温度LST数据集

目录 数据概述🔧研究目标与意义🧠 算法核心组成1. 地表比辐射率(LSE)估算2. 大气校正(Atmospheric Correction)LST反演流程图📊 精度验证与评估结果参考《Generating the 30-m land surface temperature product over continental China and USA from Landsat 5/7/8 …

【CATIA的二次开发07】草图编辑器对象结构及应用

【CATIA的二次开发07】草图编辑器对象结构及应用 草图编辑器(SketchEditor)是用于创建和编辑2D草图的核心对象。其对象结构遵循CATIA的层级关系,以下是详细说明及代码示例: 一、核心对象结构图 Application │ └─ Documents│└─ Document (.CATPart)│└─ Part│└─…

IT | 词汇科普手册Ⅱ

目录 1.报文(Message) 2.Token(令牌) Token vs. Cookie Token vs. Key "碰一碰"支付 3.NFC 4.Nginx 5.JSON 6.前置机 前置机vs.Nginx反向代理 以PDA、WMS举例前置机场景 7.RabbitMQ 核心功能 1.报文(Message) 报文&#xff08;Message&#xff09;​​是系统或组件之…

【 java 基础问题 第一篇 】

目录 1.概念 1.1.java的特定有哪些&#xff1f; 1.2.java有哪些优势哪些劣势&#xff1f; 1.3.java为什么可以跨平台&#xff1f; 1.4JVM,JDK,JRE它们有什么区别&#xff1f; 1.5.编译型语言与解释型语言的区别&#xff1f; 2.数据类型 2.1.long与int类型可以互转吗&…

自用git记录

像重复做自己在网上找的练习题&#xff0c;这种类型的git仓库管理&#xff0c;一般会用到以下命令&#xff1a; git revert a1b2c3 很复杂的git历史变成简单git历史 能用git rebase -i HEAD~5^这种命令解决&#xff0c;就最好&#xff08;IDEA还带GUI&#xff0c;很方便&…

本地环境下 前端突然端口占用问题 针对vscode

1.问题背景 本地运行前端代码&#xff0c;虚拟机中使用nginx反向代理。两者都使用vscode进行开发。后端使用vscode远程连接。在前端发起一次接口请求后&#xff0c;后端会产生新的监听端口&#xff0c;出现如下图的提示情况。随后前端刷新&#xff0c;甚至无法正常显示界面。 …

C++ - 仿 RabbitMQ 实现消息队列(3)(详解使用muduo库)

C - 仿 RabbitMQ 实现消息队列&#xff08;3&#xff09;&#xff08;详解使用muduo库&#xff09; muduo库的基层原理核心概念总结&#xff1a;通俗例子&#xff1a;餐厅模型优势体现典型场景 muduo库中的主要类EventloopMuduo 的 EventLoop 核心解析1. 核心机制&#xff1a;事…

docker部署XTdrone

目录 一、前置准备 二、依赖安装 三、ros安装 四、gazebo安装 五、mavros安装 六、PX4的配置 七、Xtdrone源码下载 八、xtdrone与gazebo&#xff08;实际上应该是第四步之后做这件事&#xff09; 九、键盘控制 参考链接&#xff1a;仿真平台基础配置 语雀 一、前置准…

图解 | 大模型智能体LLM Agents

文章目录 正文1. 存储 Memory1.1 短期记忆 Short-Term Memory1.1.1 模型的上下文窗口1.1.2 对话历史1.1.3 总结对话历史 1.2 长期记忆Long-term Memory 2. 工具Tools2.1 工具的类型2.2 function calling2.3 Toolformer2.3.1 大模型调研工具的过程2.3.2 生成工具调用数据集 2.4 …

echarts设置标线和最大值最小值

echarts设置标线和最大值最小值 基本ECharts图表初始化配置 设置动态的y轴范围&#xff08;min/max值&#xff09; 通过markPoint标记最大值和最小值点 使用markLine添加水平参考线 配置双y轴图表 自定义标记点和线的样式&#xff08;颜色、符号等&#xff09; 响应式调整图表大…

Maven 中央仓库操作指南

Maven 中央仓库操作指南 登录注册 在 Maven Central 登录&#xff08;注册&#xff09;账号。 添加命名空间 注册 通过右上角用户菜单跳转到命名空间管理页面&#xff1a; 注册命名空间&#xff1a; 填入你拥有的域名并注册&#xff1a; 刚提交的命名空间状态是Unverified…

BUUCTF——RCE ME

BUUCTF——RCE ME 进入靶场 <?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight…

FreeRTOS--消息队列

一、简介 消息队列是FreeRTOS中用于任务与任务或任务与中断之间数据交换的一种机制&#xff0c;采用FIFO&#xff08;先进先出&#xff09;方式管理数据&#xff0c;也可以采用LIFO&#xff08;后进先出&#xff09;方式。有点类似全局变量。 1.1 那为什么不直接使用全局变量&a…

三步快速部署一个本地Windows/Linux大语言模型ChatGLM(环境配置+权重下载+运行)

前言&#xff1a; 最近刚拿到实验室一个装了3张3090显卡的服务器账号&#xff0c;感觉不用来霍霍有点浪费&#xff0c;于是有了部署一个大语言模型的想法&#xff0c;除去下载权重和传文件到服务器上可能也就用了十分钟不到&#xff08;这下看懂为啥python受众现在这么广了&…

DeepSeek联网Google搜索引擎

目录&#xff1a; 1、使用背景2、实现代码3、Gradio 的 yield 机制 1、使用背景 比如所有易建联是什么时候退役的&#xff1f;使用大模型对这种实事回答不准确&#xff0c;需要通过联网搜索处理。 正确答案应该是2023年8月29日退役。 2、实现代码 # import gradio as gr# d…

奈雪小程序任务脚本

功能概述 该脚本用于自动完成奈雪点单小程序的每日任务&#xff0c;包括&#xff1a; 自动检测 Token 有效性自动签到&#xff08;如果未签到&#xff09;获取用户基础信息&#xff08;昵称、手机号&#xff09;查询当前奈雪币余额记录连续签到天数支持多账号执行&#xff0c…

上海医日健集团物联网专利技术领跑智慧药房赛道

在智慧医疗蓬勃发展的浪潮中&#xff0c;上海医日健集团凭借其卓越的创新能力与强大的技术实力&#xff0c;在智慧药房领域崭露头角。集团自主研发的物联网专利技术&#xff0c;正以前所未有的优势&#xff0c;重塑智慧药房运营模式&#xff0c;引领行业迈向新的发展高度。 上…

基于Java+MySQL实现(Web)图书借阅管理系统

图书借阅管理系统(前后台) 1 需求分析 图书借阅管理系统是模拟学校图书馆实现的一个具有前后台的 Web 系统.对于读者,能够提供全文检索,个性化推荐,借阅等功能.对于管理员,能够提供可视化数据分析,信息管理等功能. 2 技术栈 前端: Layui,jQuery,echarts 后端:Spring Boot,…

SAR ADC的功耗设计

SAR ADC 由比较器、逻辑和DAC组成,功耗比可能是3:6:1,对于低功耗设计来说,我们需要尽量让DAC的功耗最小,这里来探讨一下CDAC的功耗计算方法。 CDAC从状态1切换到状态2时,需要从Vref buffer上抽拉电荷。C是状态2时连接Vref的总电容,V2就是状态2时接Vref的电容上的电压…