华为OD机试真题 新系统 - API请求日志去重分析 (JavaPyCC++JsGo)

2 阅读3分钟

API请求日志去重分析

2026 华为OD机试真题 4月15日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

某微服务系统的日志监控平台需要分析API调用记录。日志中包含大量重复的请求记录,为了优化存储和后续分析,需要对相邻的重复请求进行合并统计。

具体规则如下:

1.日志按时间顺序排列,每条记录包含请求路径和响应时间

2.如果连续出现相同的请求路径,需要将这些记录合并为一条

3.合并后的记录需要统计该路径连续出现的次数,并保留所有响应时间的平均值

4.相同路径但被其他路径分隔的,视为不同的记录组,需要分别合并

请实现一个函数,对给定的日志数据进行去重合并处理。

输入描述

输入请求路径path数组,按时间顺序排列

输入对应的响应时间responseTimes数组(毫秒)

补充

  • 0≤paths.length≤10^5
  • 0≤responseTimes.length≤10^5
  • paths.length==responseTimes.length
  • 1≤responseTimes[i]≤10^4
  • 路径长度不超过 100个字符

输出描述

按顺序输出每个记录组信息,每个记录组包含以下三个元素

  • 该路径在输入数组中首次出现索引
  • 该路径连续出现的次数
  • 该组路径的平均响应时间(向下取整)

示例1

输入

/api/user,/api/user,/api/order,/api/user,/api/order,/api/order
100,200,150,300,250,350


输出

0,2,150 2,1,150 3,1,300 4,2,300


说明

pi/user在索引0-1连续出现,平均响应时间为150

/api/order在索引2单独出现,平均响应时间为150

api/user在索引3单独出现,由于被分割,响应时间为300

/api/order在索引 4−5 连续出现 2 次,平均响应时间:(250+350)/2=300

解题思路

核心思想

本题本质上是一个游程编码(Run-Length Encoding)或者双指针问题。 由于题目要求对相邻的相同请求路径进行合并,我们只需要遍历路径数组,并使用指针来寻找连续相同的路径段。

  1. 遍历数组,对于当前路径,记录其起始索引 i
  2. 继续向后查找,直到遇到与当前路径不同的路径,或者到达数组末尾,假设此时索引为 j
  3. 那么从 ij-1 就是一段连续的相同路径。这段路径的连续出现次数为 j - i
  4. 计算这段路径的总响应时间,并求平均值(向下取整,即整数除法)。
  5. 将合并后的记录(起始索引、出现次数、平均响应时间)格式化输出。
  6. 将当前索引更新为 j,继续下一段的查找。

复杂度分析

  • 时间复杂度: O(N)\mathcal{O}(N),其中 NN 为路径数组的长度。虽然有嵌套循环,但每个元素最多被访问一次,总的时间复杂度是线性的。
  • 空间复杂度: O(N)\mathcal{O}(N),用于存储结果字符串或结果列表。