AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

K0091. 魔法集市的能量潮汐

中等通过率 86% · 提交 22 · 通过 19
滑动窗口前缀和哈希表模拟

小慕正在经营一个大型的魔法能量工坊。 工坊内安装了若干台能量采集装置,用于记录在某一时间段内,每分钟稳定产生的魔法能量。 现在,小慕希望统计: > 在所有装置中,哪一台在连续 60 分钟内累计产生的魔法能量最多? --- 能量记录说明 给定一个二维整数数组 `logs`,其中每条记录格式为:


logs[i] = [deviceId, startTime, endTime, energyPerMinute]

含义为: - `deviceId`:装置编号 - `[startTime, endTime)`:时间区间(单位:分钟,) - `energyPerMinute`:在该时间段内,每分钟稳定产生的魔法能量 --- 核心规则 1. 能量叠加规则(关键修改点) - 同一装置在同一时间点若存在多条记录 - 该分钟的魔法能量为 所有记录的 energyPerMinute 之和 2. 空白时间规则 - 若某分钟没有任何记录 - 该分钟的魔法能量视为 `0` 3. 目标计算规则 - 对每个装置,计算任意一个 - 最终返回魔法能量总和最大的装置信息:


[deviceId, startTime, totalEnergy]

其中: - `startTime` 为该 60 分钟区间的起始时间 - `totalEnergy` 为该区间内的 --- 优先级规则(从高到低) 1. `totalEnergy` 更大的优先 2. 若相同,`deviceId` 更小的优先 3. 若仍相同,`startTime` 更早的优先

提示:带虚线的词点一下有通俗解释。

输入描述

``` n stallId_1 openTime_1 closeTime_1 manaPerMinute_1 stallId_2 openTime_2 closeTime_2 manaPerMinute_2 ... stallId_n openTime_n closeTime_n manaPerMinute_n ``` - `1 <= n < 10000` - `1 <= stallId <= 100` - `0 <= openTime < closeTime <= 720` - `closeTime - openTime <= 720` - `1 <= manaPerMinute < 1000`

输出描述

``` stallId startTime totalMana ```

示例

示例 1

输入

4
9 0 121 50
9 100 150 80
9 100 121 70
4 0 200 50

输出

9 90 7020

说明:摊位 4: - 任意连续 60 分钟魔法能量恒为 `50 * 60 = 3000` 摊位 9: 选择区间 `[90,150)`: - `[90,100)`:`10` 分钟 × `50` = `500` - `[100,121)`:`21` 分钟 × `(50+80+70)=200` = `4200` - `[121,150)`:`29` 分钟 × `80` = `2320` 总魔法能量: ``` 500 + 4200 + 2320 = 7020 ``` 为全体摊位最大值,且 `startTime=90` 是最早满足该最大值的时间点。

示例 2

输入

4
7 10 110 180
2 0 200 100
5 0 120 150
5 1 121 150

输出

5 1 18000

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
示例:摊位9的魔法能量时间线 0 100 150 记录1: 50/分钟 记录2: 80/分钟 记录3: 70/分钟 叠加区间 90 150 选中的60分钟区间 [90,150) 记录1: [0,121) 50 记录2: [100,150) 80 记录3: [100,121) 70
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「魔法集市的能量潮汐」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。