解题思路
本题的核心是固定长度滑动窗口求最小子数组和。
由于连续小时数 hours 是固定的,我们可以维护一个长度为 hours 的滑动窗口,窗口在电价数组上从左向右移动,每次移动时:
- 减去窗口最左侧离开的元素值
- 加上窗口最右侧新进入的元素值
题目内容
给定一个一维数组 priceArray,表示未来 priceRecords 小时内每小时的电价(单位:分/kWh)。
找出充电成本最低的连续 hours 个小时时间段的开始时刻点。
若存在多种成本最低方案,优先返回最低成本方案的最早的时刻点。
输入描述
- 参数 1:整数 priceRecords,表示电价记录数量
- 参数 2:整数 hours,表示连续小时数
- 参数 3:一维数组 priceArray,表示每小时的电价 price1∼priceN,以空格分隔
- 约束条件:1⩽priceRecords⩽24,1⩽hours⩽priceRecords,1⩽price1∼priceN⩽100
输出描述
返回一个整数,表示最优充电时段的起始索引(从 0 开始)。
样例1
输入
12,3,[25,15,20,18,12,25,30,28,22,16,14,35]
输出
2
说明
连续时间段为 3,从 0 时刻开始分段计算最小总成本:
- 0 为起始索引时 总费用 25+15+20=60
- 1 为起始索引时 总费用 15+20+18=53
- 2 为起始索引时 总费用 20+18+12=50
- 3 为起始索引时 总费用 18+12+25=55
- 4 为起始索引时 总费用 12+25+30=67
- 5 为起始索引时 总费用 25+30+28=83
- 6 为起始索引时 总费用 30+28+22=80
- 7 为起始索引时 总费用 28+22+16=66
- 8 为起始索引时 总费用 22+16+14=52
- 9 为起始索引时 总费用 16+14+35=65
连续 3 小时的最低电价时段是索引 2-4,价格分别为 20,18,12,总费用 =20+18+12=50 分最低
因此充电最低时间起始索引为 2
样例2
输入
12,4,[23,35,67,68,89,12,24,37,57,10,12,45]
输出
7
说明
连续时间段为 4,从 0 时刻开始分段计算最小总成本:
- 0 为起始索引时 总费用 23+35+67+68=193
- 1 为起始索引时 总费用 35+67+68+89=259
- 2 为起始索引时 总费用 67+68+89+12=236
- 3 为起始索引时 总费用 68+89+12+24=193
- 4 为起始索引时 总费用 89+12+24+37=162
- 5 为起始索引时 总费用 12+24+37+57=130
- 6 为起始索引时 总费用 24+37+57+10=128
- 7 为起始索引时 总费用 37+57+10+12=116
- 8 为起始索引时 总费用 57+10+12+45=124
连续 4 小时的最低电价时段是索引 7-10,价格分别为 37,57,10,12,总费用 =37+57+10+12=116 分最低
因此充电最低时间起始索引为 7