华为OD机试 - 批量处理任务 - 二分查找(Java 2025 A卷 200分)

华为OD机试:批量任务处理与二分查找Java解法
这篇博客介绍了华为在线开发者(OD)机试的一道题目,涉及批量处理任务的解决方案。任务以[start, end, period]格式给出,计算机需要在特定时间段处理任务。博主提出了利用二分查找和栈来优化问题,通过在栈中查找左端点,合并区间,并计算最少开机时间。示例展示了Java算法源码和不同输入输出情况。" 6660264,1154138,Android整合MENU与ListView展示,"['Android开发', 'UI设计', '数据绑定', '菜单交互', 'ListView']

一、题目描述

某实验室计算机待处理任务以 [start,end,period] 格式记于二维数组 tasks,表示完成该任务的时间范围为起始时间 start 至结束时间 end 之间,需要计算机投入 period 的时长,注意:

  1. period 可为不连续时间
  2. 首尾时间均包含在内

处于开机状态的计算机可同时处理任意多个任务,请返回电脑最少开机多久,可处理完所有任务。

二、输入描述

[[1,3,2],[2,5,3],[5,6,2]]

三、输出描述

4

  1. tasks[0] 选择时间点 2、3;
  2. tasks[1] 选择时间点 2、3、5;
  3. tasks[2] 选择时间点 5、6;
  4. 因此计算机仅需在时间点 2、3、5、6 四个时刻保持开机即可完成任务。

四、测试用例

测试用例1:

1、输入

[[1,3,2],[2,5,3],[5,6,2]]

2、输出

4

3、说明

任务1选择时间点2、3;

任务2选择时间点2、3、5;

任务3选择时间点5、6;

计算机需要在时间点

### 华为实习题目及相关练习 对于希望参加华为实习并准备其的同学来说,了解常见的题目及其解题方法至关重要。以下是关于华为OD的一些高频手撕代码题以及对应的解决思路[^2]。 #### 常见的华为OD题目类 以下是一些典型的华为OD题列表: 1. **九宫格全排列** - 使用回溯法实现所有可能的排列组合。 - 提供多种语言版本(C、C++、Python、JavaJavaScript)解决方案[^4]。 2. **扑克牌消除逻辑** - 设计一种算法来模拟扑克牌游戏中的消除过程。 - 关键在于如何高效地匹配和移除符合条件的牌组。 3. **配资源ID逻辑+集合** - 解决方案涉及集合操作与冲突检测。 - 可以通过哈希表优化查找速度。 4. **批量初始化次数排序** - 排序问题是基础但重要的一环。 - 考虑稳定性与时效性的平衡。 5. **云上故障逃生优先队列 (Dijkstra 算法)** - 应用经典的 Dijkstra 最短路径算法求解最优逃生路线。 - 特别注意图结构的设计与权重赋值。 6. **购物系统的降级策略 ()** - 当系统负载过高时,采用二分查找快速定位可降级的服务模块。 - 此类问题通常考察数据结构的理解能力。 7. **服务器消耗统计区间问题** - 利用滑动窗口技术处理连续区间的动态变化。 - 时间复杂度需尽可能低。 8. **计算云服务 DI 值 (哈希表)** - 构建高效的哈希映射存储大量离散数值。 - 并发访问场景下的线程安全也是考量因素之一。 9. **树上逃离 (图:深度优先)** - 将整棵树视为无向连通图,并对其进行层次划- 结合广度优先搜索(BFS),找到最短时间内抵达目标节点的方法[^5]。 #### 示例代码片段 下面提供一道典型题目——`树上逃离`的具体实现方式作为参考: ```cpp #include <iostream> #include <queue> #include <vector> using namespace std; struct Node { int id; vector<int> neighbors; }; int bfsEscapeTime(vector<Node>& graph, int start, int princess) { queue<pair<int, int>> q; // {currentNode, time} vector<bool> visited(graph.size(), false); q.push({start, 0}); visited[start] = true; while (!q.empty()) { auto [nodeId, currentTime] = q.front(); q.pop(); if (nodeId == princess) return currentTime; for(auto neighbor : graph[nodeId].neighbors){ if(!visited[neighbor]){ visited[neighbor]=true; q.push({neighbor,currentTime+1}); } } } return -1; // If unreachable } // Example usage: /* graph[0].id=0; graph[0].neighbors={1}; graph[1].id=1; graph[1].neighbors={0,2}; graph[2].id=2; graph[2].neighbors={1,3}; graph[3].id=3; graph[3].neighbors={2};*/ ``` 此段代码展示了基于BFS算法寻找从起点到终点所需最少步数的过程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值