返回

挑战,策略大比拼!LeetCode每日一题:60.提莫攻击

前端

前言

大家好,欢迎来到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 点伤害。

算法解析

这道题的算法解析如下:

  1. 定义一个变量 damage,表示艾希当前受到的伤害。
  2. 定义一个变量 lastAttackTime,表示提莫上次攻击艾希的时间。
  3. 遍历数组 timeSeries。对于每个时间点 i,执行以下步骤:
    • 如果 i - lastAttackTime < 3,说明提莫在艾希中毒期间再次攻击了艾希,那么艾希中毒效果刷新,持续时间重置。因此,damage 增加 4。
    • 否则,说明提莫在艾希中毒期间没有攻击艾希,那么艾希中毒效果消失,damage 减少 4。
    • 更新 lastAttackTimei
  4. 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打卡挑战,一起提高编程能力,挑战自我!