一、题目解析
题目首先给出了duration用于表示中毒的持续时间,而在t时发起攻击,[t,t+duration-1]都是在中毒状态下,而数组timeSeries则储存了攻击的t值。我们则需要返回中毒的总时间。
可以结合示例例来了解一下如何计算中毒总时长的。
二、算法解析
模拟算法顾名思义,我们需要去模拟问题的执行过程。
我们可以注意到给出的t是以区间的方式给出的,就像上面的[1,4]我们就可以理解为分别在1和4发动了攻击,4的时间是最好算的,因为它是最后一次攻击,所以它的持续时间就等于duration,而1发动的攻击的中毒时长会受到下一次攻击的影响,题目上说攻击可以重置中毒计时器,所以我们需要注意给出的两次攻击的间隔时间或多次攻击的其中二次的间隔时间,这里可以用x代替间隔的时间。
通过分析我们可以知道当x>=duration时,这时的中毒时间就为duration,如果x<duration时,这时的中毒时间就为两次攻击的差值,即x。
到这里就可以根据解析自己去实现代码了, 495. 提莫攻击 - 力扣(LeetCode)
三、代码示例
这里虽然有c和c++两种的实现,但其实大体形式都是一样的。
这里我们需要一个ret来记录中毒的总时长,对于我们每次最后一次攻击的中毒时长都为给出的duration的值,所以为了方便我们可以给ret初始化赋值为duration,根据for循环来得到攻击的t,并计算前后两个的差值,用于判断中毒的时间。
这里为了避免数组越界访问,我们计算前后差值只需要访问到timeSeriesSize-1或timeSeries.size()-1即可。
这里两次通过的结果都是一样的,所以没有必要放两次截图了。
看到这里,如果对您有所帮助,请留下一个免费的赞和评论吧,您的点赞和评论是对我的认可,期待我们下期再见!