每日一题——495. 提莫攻击

495. 提莫攻击

在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。

当提莫攻击艾希,艾希的中毒状态正好持续 duration 秒。

正式地讲,提莫在 t 发起发起攻击意味着艾希在时间区间 [t, t + duration – 1](含 t 和 t + duration – 1)处于中毒状态。如果提莫在中毒影响结束 前 再次攻击,中毒状态计时器将会 重置 ,在新的攻击之后,中毒影响将会在 duration 秒后结束。

给你一个 非递减 的整数数组 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒时对艾希发起攻击,以及一个表示中毒持续时间的整数 duration 。

返回艾希处于中毒状态的总秒数。

public class Solution {
    public int FindPoisonedDuration(int[] timeSeries, int duration) {
        int time = 0;

        for(int i = 1; i<timeSeries.Length; i++)
        {
            if((timeSeries[i] - timeSeries[i-1]) > duration)
            {
                time += duration;
            }
            else 
            {
                time += timeSeries[i] - timeSeries[i-1];
            }
        }

        time = time + duration;

        return time;
    }
}

比较暴力的思路

我们直接举三个例子

[1,4] 2

我们先做判断4-1是不是大于2

如果大于中毒秒数2那么1秒后中毒时间就一定是2秒

最后加上4秒中毒的2秒

得到结果4秒

[1,2] 2

很显然2-1比2来的小

那么1秒后中毒的秒数就只有1秒

最后加上2秒后中毒的2秒

得到结果3秒

[1,2,3] 2

2-1<2 所以中毒秒数1

3-2<2 所以中毒秒数还是1

最后加上3秒的2

得到结果4

通过这三个例子你大概就能明白这个思路了

不管怎样先从1开始遍历数组

如果两次中毒间隔的秒数比中毒时间大

很显然当前时间就是中毒时间

反之就是两次中毒间隔的秒数

最后加上最后一次中毒的中毒时间

就能够得到总时间

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注