返回
挑战,策略大比拼!LeetCode每日一题:60.提莫攻击
前端
2024-01-14 00:51:59
前言
大家好,欢迎来到LeetCode每日一题挑战!今天我们要解决的是第60题“提莫攻击”。这是一个非常有趣的题目,考验你的编程能力和对游戏策略的理解。
原题样例:提莫攻击
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)中毒。中毒后的艾希会受到持续伤害,直到毒素消失。提莫的攻击冷却时间为 3 秒,也就是说他每 3 秒可以攻击一次。如果提莫在艾希中毒期间再次攻击,中毒效果会刷新,持续时间重置。
现在,给你一个整数数组 timeSeries
,其中 timeSeries[i]
表示提莫在第 i
秒攻击艾希的时刻(以秒为单位)。你应该返回一个整数数组 answer
,其中 answer[i]
表示在第 i
秒时,艾希受到提莫攻击的总伤害。
示例 1:
输入:timeSeries = [1, 4, 6, 7, 8, 10]
输出:[0, 4, 4, 4, 4, 4, 0]
解释:
- 在第 1 秒,提莫攻击艾希,艾希中毒,受到 4 点伤害。
- 在第 4 秒,提莫再次攻击艾希,艾希中毒效果刷新,持续时间重置。所以艾希受到 4 点伤害。
- 在第 6 秒,提莫再次攻击艾希,艾希中毒效果刷新,持续时间重置。所以艾希受到 4 点伤害。
- 在第 7 秒,提莫再次攻击艾希,艾希中毒效果刷新,持续时间重置。所以艾希受到 4 点伤害。
- 在第 8 秒,提莫再次攻击艾希,艾希中毒效果刷新,持续时间重置。所以艾希受到 4 点伤害。
- 在第 10 秒,提莫没有攻击艾希,所以艾希受到 0 点伤害。
算法解析
这道题的算法解析如下:
- 定义一个变量
damage
,表示艾希当前受到的伤害。 - 定义一个变量
lastAttackTime
,表示提莫上次攻击艾希的时间。 - 遍历数组
timeSeries
。对于每个时间点i
,执行以下步骤:- 如果
i - lastAttackTime < 3
,说明提莫在艾希中毒期间再次攻击了艾希,那么艾希中毒效果刷新,持续时间重置。因此,damage
增加 4。 - 否则,说明提莫在艾希中毒期间没有攻击艾希,那么艾希中毒效果消失,
damage
减少 4。 - 更新
lastAttackTime
为i
。
- 如果
- 将
damage
数组返回。
代码实现
def findPoisonedDuration(timeSeries):
"""
:type timeSeries: List[int]
:rtype: int
"""
damage = 0
lastAttackTime = 0
for i in timeSeries:
if i - lastAttackTime < 3:
damage += 4
else:
damage -= 4
damage = max(damage, 0)
lastAttackTime = i
return damage
总结
这道题的难点在于对游戏策略的理解。需要明白提莫的攻击机制和艾希的中毒效果,才能正确地计算出艾希受到的伤害。希望今天的文章对你有帮助,也欢迎你参加我们的每日LeetCode打卡挑战,一起提高编程能力,挑战自我!