当前位置 博文首页 > weixin_43839163的博客:LeetCode495——提莫攻击

    weixin_43839163的博客:LeetCode495——提莫攻击

    作者:[db:作者] 时间:2021-08-21 22:17

    题目描述
    在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。
    你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。

    示例1:
    输入: [1,4], 2
    输出: 4
    原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。
    第 4 秒初,提莫再次攻击艾希,使得艾希获得另外 2 秒中毒时间。
    所以最终输出 4 秒。

    示例2:
    输入: [1,2], 2
    输出: 3
    原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。
    但是第 2 秒初,提莫再次攻击了已经处于中毒状态的艾希。
    由于中毒状态不可叠加,提莫在第 2 秒初的这次攻击会在第 3 秒末结束。
    所以最终输出 3 。

    提示:
    你可以假定时间序列数组的总长度不超过 10000。
    你可以假定提莫攻击时间序列中的数字和提莫攻击的中毒持续时间都是非负整数,并且不超过 10,000,000。

    解题思路
    计算持续时间主要分为两种情况,一种是中毒持续时间未结束,就开始重新计算中毒持续时间;另一种是中毒持续时间已结束,再次进入中毒持续时间。第一部分只需计算下一次持续时间与当前持续时间的差值即可,第二部分则直接使用单位大小中毒持续时间d即可,最后求和即可。(为什么返回t+d?因为最后一个开始时间所带来的持续时间未进行计算,所以需要单独加一个单位时间d)

    代码

    class Solution:
        def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
            d=duration
            t=0
            while(len(timeSeries)):
                for i in range(len(timeSeries)-1):
                    if timeSeries[i]+d<=timeSeries[i+1]:
                        t=t+d
                    else: 
                        t=t+timeSeries[i+1]-timeSeries[i]
                return t+d
            return t
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/teemo-attacking
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    cs
    下一篇:没有了