LeetCode Teemo Attacking

来源:互联网 发布:淘宝靠谱电玩店 编辑:程序博客网 时间:2024/05/21 21:50

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], 2Output: 4Explanation: 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], 2Output: 3Explanation: 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;    }}


原创粉丝点击