5.26华为od题目回顾

第一题

给定一秒可以处理的任务数,然后给定n个任务,代表每秒新增的任务数

1
2
3
4
5
6
7
8
9
10
11
3 
5
1 2 3 4 5
代表的意思就是,每秒最多处理五个,然后有五个任务,顺次执行
1s:处理第一个任务 由于任务数量为1可以直接处理
2s:小于3也可以直接处理
3s:同上
4s:由于最多只能处理3个,所以还剩一个未处理的到下一秒
5s:需要处理新增的5个任务和上次剩的1个共六个,最多只能处理三个,所以还剩三个
6s:处理上次剩的三个,而且没有新增的,全部处理完
结论就是,如果本次处理不了有剩余的就会加入下一次的处理

代码处理的就是处理数组的每一个数据,如果有剩余的任务数,就加到下一个任务中,最后在计算最终剩余的数量可以几轮处理完,re的含义就是本轮剩余的任务数.

第二题

题目大意为,给长度为100的区间,然后会占用里面部分空间,求在剩余的空间中,是否可以找到 分配空间足够大 而且 最接近申请空间大小的位置

每一个空间都是由两部分组成,偏移量和大小,就相当于起始位置和大小,所以对每个内存都设置一个结构体,包含这两个信息

下面是具体的介绍

屏幕截图 2024-05-26 112543
屏幕截图 2024-05-26 112651
屏幕截图 2024-05-26 112726
屏幕截图 2024-05-26 112802
屏幕截图 2024-05-26 112832

第三题

就是给你一系列数组,然后要求合并数组

1
2
3
4
5
6
7
8
题目中给的是二维数组 然后合并二维数组里面的每一项
比如二维数组为[[1,4],[2,5],[7,9],[10,15]]
则合并后的区间为[[1,5],[7,9],[10,15]]
首先就是先排序二维数组里面的顺序,排序的原则为起点在前面的优先
注:我这里本来打算用c++进行二维数组排序,然后有些问题,所以采取python,要是问道你为什么换语言,你可以说py在这里进行数组排序比较方便
ans为最终结果数组,pre是上一个时间段,cur为当前时间段
然后你可以模拟一下情况,假如当前的头在上一个的尾巴前面,就说明重合,可以合并,如果不重合,说明时间中间存在空白区域,就可以直接加入到结果数组
最后返回的就是答案了

5.26华为od题目回顾
https://rain_dew.gitee.io/2024/05/26/算法/比赛或笔试/5.26华为od题目回顾/
Author
Wang yulu
Posted on
May 26, 2024
Licensed under