华为OD机考双机位C卷 - 压缩日志查询 (Java & Python & JS & GO & C++ & C)
压缩日志查询
2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷
华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)
题目描述
某设备需要记录每分钟检测到的指标值。为了节约存储空间,将连续相同指标值的记录合并。
压缩之前: 202411231000,11 202411231001,11 202411231002,12 202411231003,12 202411231004,10 202411231005,17 202411231006,17 202411231007,17
压缩之后: 202411231000,202411231001,11 202411231002,202411231003,12 202411231004,202411231004,10 202411231005,202411231007,17
查询时,根据输入的时间范围进行查询,需要返回回时间范围内记录的每分钟的指标值,如果某个时间点没有记录值,则此条记录忽略不返回。
输入描述
第一行为查询的时间范围,格式是:startTime,endTime。查询的时间范围为闭区间,即大于等于startTime且小于等于endTime, startTime <= endTime,且他们跨度的分钟数小于100;
第二行为压缩日志记录的行数,100 >= N > 0;
第三行及以后为压缩日志内容。每一行的格式为:startTime,endTime,kpi,其中 startTime<=endTime,10^5>kpi>=0;记录已按升序进行排序。
不保证两行记录之间是紧密连接,startTime和endTime的时间跨度可能很大。 如:上一行的数据显示范围是202411231540, 202411231542,下一行的数据显示可以是 202411231544, 202411231547, 中间202411231543的数据可能由于其他原因缺失
输出描述
输出描述 查询到的日志清单,如: 202411231010,11 202411231011,10 202411231012,10 202411231013,16
输出结果按数据时间升序排序。
补充说明 输入的数据可能超出当前已存储的数据范围,此时只输出查询到的数据。 如果从头到尾都没有查询到记录,则输出-1。
示例1
输入
202411231010,202411231013
4
202411231000,202411231010,11
202411231011,202411231012,10
202411231013,202411231020,16
202411231021,202411231028,17
输出
202411231010,11
202411231011,10
202411231012,10
202411231013,16
说明
202411231010时间的指标值在202411231000,202411231010范围内,值是11 202411231011,202411231012时间的指标值在202411231011,202411231012范围内,值是10 202411231013时间的指标值在202411231013,202411231020范围内,值是16
解题思路
-
解析输入:读取查询区间
Qstart,Qend、记录数N、以及 N 条压缩记录Rstart,Rend,kpi(题目已保证按时间升序)。 -
将时间字符串解析成支持比较与“加一分钟”的时间类型(或自定义年月日时分结构并实现分钟进位)。
-
在闭区间 [Qstart, Qend] 上逐分钟遍历(分钟数 M < 100):
-
对每个时间点
t,按记录输入顺序扫描记录,找到第一个满足Rstart <= t <= Rend的记录。 -
若找到,则输出一行
yyyyMMddHHmm,kpi,然后处理下一个分钟;若找不到,则忽略该分钟(不输出)。
-
-
若遍历完后没有任何输出,则打印
-1。 -
关键点与边界:
-
时间区间端点包含在内(inclusive)。
-
记录重叠时按输入的先后顺序优先匹配第一个覆盖的记录。
-
算法复杂度为 O(M*N),在题目给定的限制下足够快;若 N 很大,可用二分或预填映射(把每条记录交集的分钟段写入 map)做优化,查询时可 O(1) 取得某分钟的 kpi。
-
-
注意处理跨天/月/年进位和单分钟(start==end)记录。
浙公网安备 33010602011771号