通过率 44% · 提交 998 · 通过 437
在一个狭小的路口,每秒只能通过一辆车,假如车辆的颜色只有 3 种,找出 N 秒内经过的最多颜色的车辆数量,三种颜色编号为 0, 1, 2。
这类题属于华为 OD 机考真题方向中「100分 / 滑动窗口」方向的高频题型,通常考察对「100分 / 滑动窗口」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
第一行输入的是通过的车辆颜色信息。比如[0, 1, 1, 2] 代表 4 秒钟通过的车辆颜色分别是 0, 1, 1, 2 第二行输入的是统计时间窗,整型,单位为秒。
输出指定时间窗内经过的最多颜色的车辆数量
示例 1
输入示例
0 1 2 1 3
输出示例
2
在[1,2,1]这个 3 秒时间窗内,1 这个颜色出现 2 次,数量最多
示例 2
输入示例
0 1 2 1 2
输出示例
1
在 2 秒时间窗内,每个颜色最多出现 1 次
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
本题明确地指出,时间窗口的长度为 N,所以考虑使用 固定滑窗 来解决问题。
由于在滑窗内需要统计各种颜色车辆的数目,所以我们可以用 哈希表 来统计元素频率。特别地,由于题目告诉我们车辆颜色有且只有 0, 1, 2 三种,所以我们可以更加简单地用一个列表 windows_colors 来代替哈希表。
对于固定滑窗,我们需要考虑滑窗和答案的初始化。我们需要以第一个窗口,即 colors[0:N] 这个窗口的情况来初始化 windows_colors = [0, 0, 0]。然后遍历 colors[0:N] 中的颜色,将其统计在 windows_colors 中。而答案变量 ans 的初始化,即为第一个固定滑窗中的 最大值。
然后我们思考 滑窗三问三答。
right 所指的元素 right_color,做什么操作?left 右移?对于 left 所指的元素 left_color,要做什么操作?ans 的更新?如何更新?right_color 在 windows_colors 中的统计次数 +1left 始终为 right - N,同时需要将 left_color 在 windows_colors 中的统计次数 -1windows_colors 的更新后,取其中 最大值 和当前 ans 比较并更新。复杂度分析 设 n 为车流颜色序列 colors 的长度,N 为时间窗口的长度。
正因为颜色种类固定为 3,才能用长度为 3 的小数组代替通用哈希表,并把「查窗口内最多的颜色数」压成常数时间;如果颜色种类为 C,每步取最大值的代价会变成 O(C),总时间为 O(n×C)。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有