AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

基站低能耗时段统计 - 魔改工程师

基站低能耗时段统计

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

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

题目描述

基站运维团队需要统计某区域基站的低能耗连续运行时段数目,以评估基站的节能优化效果。给定以下信息:

  • 整数数组 powerpower[i] 表示该基站第 i 小时的能耗值(单位:千瓦时),power[i] >= 0,能耗不会为负;
  • 整数 target:低能耗阈值(单位:千瓦时),要求连续时段的总能耗不超过该阈值;
  • 整数 max_hour:最大统计时长(单位:小时),要求连续时段的时长不超过该值,且至少为 1 小时。

请你统计满足以下两个条件的连续运行时段(子数组)的数目:

  1. 连续时段的时长属于 [1,max_hour]
  2. 该时段内的总能耗 <= target

补充说明:

  • 1 <= power.length <= 10^5
  • 0 <= power[i] <= 100
  • 0 <= target <= 10^7
  • 1 <= max_hour < power.length
  • 所有能耗值非负

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

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

输入描述

输入包含两行:

  • 第一行:整数数组 power 的表示形式,如 [0,0,0]
  • 第二行:两个整数 targetmax_hour,以逗号分隔,如 0,2

输出描述

输出一个整数,表示满足条件的连续运行时段数目。

示例1

输入

[0,0,0]
0,2

输出

5

说明

  • 长度 1 子数组:下标 0、1、2 处,共 3 个;
  • 长度 2 子数组:下标区间 [0,1][1,2],共 2 个;
  • 总计:3+2=5 个。

示例2

输入

[3,1,2,4,1]
5,3

输出

8

说明

  • 长度 1 子数组:每个单元素能耗均不超过 5,共 5 个;
  • 长度 2 子数组:满足条件的有 3 个;
  • 长度 3 子数组:满足条件的有 0 个;
  • 总计:8 个。

示例3

输入

[5,4,3]
6,2

输出

3

说明

  • 长度 1 子数组:能耗分别为 5、4、3,均 <=6,共 3 个;
  • 长度 2 子数组:满足条件的有 0 个;
  • 总计:3 个。

解题思路

核心思想

由于所有能耗值都是非负数,当右端点向右移动时,窗口总和不会减少。因此可以使用滑动窗口。

枚举左端点 left,维护最远右端点 right,使窗口 [left,right] 同时满足:

  • 窗口长度不超过 max_hour
  • 窗口总和不超过 target

那么以 left 为起点的合法连续时段数量就是 right-left+1

算法步骤

  1. 初始化 right=-1sum=0、答案 ans=0
  2. 枚举左端点 left
  3. 在长度和总能耗都满足限制时,不断右移 right
  4. right>=left,则将 right-left+1 累加到答案。
  5. 左端点右移前,从窗口总和中减去 power[left]
  6. 枚举结束后输出答案。

复杂度分析

  • 时间复杂度:O(n),左右指针都最多移动 n 次。
  • 空间复杂度:O(1),除输入数组外只使用常数额
THE END