资讯动态

游戏经典算法-提莫中毒(力扣 495)

发布时间:2026/9/2 7:36:04 来源:尧图企业网站定制
题目简单描述在《英雄联盟》中提莫是一个以“毒针”技能著称的英雄。他的每次攻击都会对敌人造成持续伤害且如果敌人在中毒期间再次被攻击中毒时间会重置。给定一个整数数组timeSeries表示提莫每次攻击的时间点单位秒以及一个整数duration表示每次攻击造成的中毒时长单位秒。请计算敌人总共被毒害的时间长度。解题思路核心逻辑每次攻击后敌人会中毒duration秒。如果下一次攻击发生在当前中毒时间内则中毒时间会被重置。因此我们需要比较相邻两次攻击之间的时间差与duration的大小关系。具体步骤边界条件处理如果timeSeries为空或者duration为 0说明没有攻击或无中毒效果直接返回 0。遍历攻击时间序列对于每一对相邻的攻击时间点timeSeries[i]和timeSeries[i1]计算它们之间的间隔。如果间隔小于duration则说明中毒时间被重置只算间隔时间如果间隔大于等于duration则说明中毒时间未被重置可以完整地加上duration。最后一步最后一次攻击一定会造成完整的duration秒中毒时间因此在循环结束后加上duration。代码实现C#public class Solution { public int FindPoisonedDuration(int[] timeSeries, int duration) { if (timeSeries.Length 0 || duration 0) return 0; int totalDuration 0; for (int i 0; i timeSeries.Length - 1; i) { // 计算当前攻击与下一次攻击之间的时间差 int interval timeSeries[i 1] - timeSeries[i]; // 取最小值中毒时间或攻击间隔 totalDuration Math.Min(duration, interval); } // 最后一次攻击一定贡献了 duration 秒 totalDuration duration; return totalDuration; } }示例分析输入timeSeries [1, 2, 3] duration 2输出4解释时间点 1 攻击 → 中毒时间1~32 秒时间点 2 攻击 → 中毒时间重置为 2~42 秒时间点 3 攻击 → 中毒时间重置为 3~52 秒总共中毒时间为 4 秒1~3、2~4、3~5 有重叠实际总时长为 4 秒复杂度分析时间复杂度O(n)其中 n 是timeSeries的长度。只需遍历一次数组。空间复杂度O(1)仅使用常量级额外空间。总结本题的核心在于理解“中毒时间重置”的逻辑并通过比较相邻攻击时间点的间隔来判断是否需要累加完整的duration。该算法时间效率高适用于大规模数据场景。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价