解题思路
本题考查双指针(滑动窗口)与子数组计数。在能耗非负的前提下,固定左端点 l 时,随着右端点右移,子数组总和单调不减,因此可以对每个 l 用指针 r 维护「仍满足条件」的最远右边界。
算法:同向双指针
- 维护当前窗口 [l,r] 的和
curSum,初始 r=−1。
- 对每个左端点 l,不断尝试 r+1 入窗,直到以下任一条件不满足则停止:
- 长度 r−l+1>maxHour;
题目内容
基站运维团队需要统计某区域基站的低能耗连续运行时段数目,以评估基站的节能优化效果。给定以下信息:
- 整数数组
power:power[i] 表示该基站第 i 小时的能耗值(单位:千瓦时),power[i]≥0,能耗不会为负;
- 整数
target:低能耗阈值(单位:千瓦时),要求连续时段的总能耗不超过该阈值;
- 整数
max_hour:最大统计时长(单位:小时),要求连续时段的时长不超过该值,且至少为 1 小时。
请你统计满足以下两个条件的连续运行时段(子数组)的数目:
- 连续时段的时长 ∈[1,max_hour];
- 该时段内的总能耗 ≤target。
补充说明:
- 1≤power.length≤105;
- 0≤power[i]≤100;
- 0≤target≤107;
- 1≤max_hour<power.length;
- 所有能耗值非负。
输入描述
输入包含两行:
- 第一行:整数数组
power 的表示形式,如 [0,0,0];
- 第二行:两个整数
target 和 max_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 个;
- 下标区间 [0,1]:总能耗 3+1=4≤5;
- 下标区间 [1,2]:总能耗 1+2=3≤5;
- 下标区间 [3,4]:总能耗 4+1=5≤5;
- 不满足:下标区间 [2,3] 总能耗 2+4=6>5;
- 长度 3 子数组:满足条件的有 0 个;
- 下标区间 [0,2]:总能耗 3+1+2=6>5;
- 下标区间 [1,3]:总能耗 1+2+4=7>5;
- 下标区间 [2,4]:总能耗 2+4+1=7>5;
- 总计:5+3=8 个。
样例3
输入
[5,4,3]
6,2
输出
3
说明
- 长度 1 子数组:能耗分别为 5、4、3,均 ≤6,共 3 个;
- 长度 2 子数组:满足条件的有 0 个;
- 下标区间 [0,1]:总能耗 5+4=9>6;
- 下标区间 [1,2]:总能耗 4+3=7>6;
- 总计:3 个。