统计能源使用时段
2026 华为OD机试真题 7月22日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
某智慧园区管理系统记录了 N 个连续的能源使用时段,每个时段使用的能源类型用整数表示(1=太阳能,2=风能,3=电能,4=天然气,5=地热能)。
为了优化能源配置,管理员需要分析:在这 N 个时段中,连续使用不超过 2 种能源的最长时段长度是多少?
请编写程序计算这个最大长度。
2026 华为OD机试真题 7月22日华为OD上机新系统考试真题 100 分题型
输入描述
- 输入是一个整数数组,表示各时段的能源类型
- 数组元素:1=太阳能,2=风能,3=电能,4=天然气,5=地热能
- 约束条件:1⩽ 数组长度 ⩽100000,能源类型为 1-5 的整数
输出描述
输出最长连续时段的长度。
补充说明
如果输入为空,则输出 0
示例1
输入
1,2,1,2,3,2,2,2
输出
5
说明
- 最长满足条件的连续时段是
[2 3 2 2 2](下标 3 到 7),长度 5- 该时段只使用了 2 种能源(2 和 3)
示例2
输入
1,2,3,4,5
输出
2
说明
最长的满足条件的连续时段是 2,因为每个时段都不一样。
解题思路
核心思想
题目要求在数组中找到一个最长连续区间,使区间内最多只出现 2 种能源类型。这是典型的滑动窗口问题。
用左右指针维护一个窗口,并用计数表记录窗口内每种能源出现的次数。当窗口内能源类型数量超过 2 时,不断右移左指针并减少对应计数,直到窗口重新满足“最多 2 种能源”。每次窗口合法时,用窗口长度更新答案。
算法步骤
- 如果输入数组为空,直接输出
。 - 初始化左指针
left = 0,计数表count,答案ans = 0。 - 右指针从左到右遍历数组,将当前能源加入窗口。
- 如果窗口内不同能源类型超过 2,则移动左指针,并同步减少左侧能源的计数。
- 当某种能源计数变为 0 时,将它从计数表中删除。
- 此时窗口合法,用
right - left + 1更新最大长度。
复杂度分析
设数组长度为 n。
- 每个元素最多被右指针加入一次、被左指针移出一次,时间复杂度为
O(n)。 - 计数表最多保存 3 种能源的临时状态,空间复杂度为 `O(
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/749
文章版权归作者所有,未经允许请勿转载。
THE END