LeetCode Teemo Attacking

本文介绍了一种算法,用于计算在给定的攻击时间序列和持续时间下,目标处于中毒状态的总时间。通过遍历时间序列并判断相邻时间点之间的关系,确保不会重复计算中毒时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned condition. Now, given the Teemo's attacking ascending time series towards Ashe and the poisoning time duration per Teemo's attacking, you need to output the total time that Ashe is in poisoned condition.

You may assume that Teemo attacks at the very beginning of a specific time point, and makes Ashe be in poisoned condition immediately.

Example 1:

Input: [1,4], 2
Output: 4
Explanation: At time point 1, Teemo starts attacking Ashe and makes Ashe be poisoned immediately. 
This poisoned status will last 2 seconds until the end of time point 2.
And at time point 4, Teemo attacks Ashe again, and causes Ashe to be in poisoned status for another 2 seconds.
So you finally need to output 4.

Example 2:

Input: [1,2], 2
Output: 3
Explanation: At time point 1, Teemo starts attacking Ashe and makes Ashe be poisoned. 
This poisoned status will last 2 seconds until the end of time point 2.
However, at the beginning of time point 2, Teemo attacks Ashe again who is already in poisoned status.
Since the poisoned status won't add up together, though the second poisoning attack will still work at time point 2, it will stop at the end of time point 3.
So you finally need to output 3.

Note:

  1. You may assume the length of given time series array won't exceed 10000.
  2. You may assume the numbers in the Teemo's attacking time series and his poisoning time duration per attacking are non-negative integers, which won't exceed 10,000,000.
题解:
此题以目前风靡网络的lol游戏为背景,介绍了一个游戏攻击规则,要求算出相应的攻击时长。规则定义如下,首先给定一个数组,里面保存有一列相应的从小到大排列的时间点,另给定一个攻击时长,那么要求按照此数组的时间点,并结合攻击时长,算出总的攻击时长,且攻击时长不能累加。给定了两个例子,可以非常明白地得出相应地攻击时长。那么此题不难,自然是通过从头到尾来遍历整个数组,然后判断当前时刻+攻击时长与下一个时刻的关系,如果是小于,那么就直接加上攻击持续时长即可;如果是小于或等于的情况,那么先每次加上下一个时刻与当前时刻的差值,然后再往下走,直到碰到小于的情况,则直接加上攻击持续时长即可。在循环结束后,还需要计算最后一个数值,即可。完整代码如下:
public class findPoisonedDuration
{
    public static int findPoisonedDuration(int[] timeSeries,int duration)
    {
        int length = timeSeries.length;
        if(length == 0)
            return 0;
        if(length == 1)
            return duration;
        int last = 0;
        int i;
        for(i = 0; i < length - 1; i++)
        {
            if(timeSeries[i] + duration - 1 < timeSeries[i + 1])
            {
                last += duration;
            }
            else if(timeSeries[i] + duration - 1 >= timeSeries[i + 1])
            {
                last += (timeSeries[i + 1] - timeSeries[i]);
            }
        }
        if(timeSeries[i - 1] + duration - 1 < timeSeries[I])   //这是最后一个元素的情况
            last += duration;
        else if(timeSeries[i - 1] + duration - 1 >= timeSeries[i])
        {
            last += duration;
        }
        return last;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值