描述
在LOL中,有一个叫做“提莫”的英雄,他的攻击能够让敌人艾希进入中毒状态。现在给定提莫的攻击时间点的升序序列,以及每次提莫攻击时的中毒持续时间,输出总的艾希中毒态的时间。
假定提莫在每一个具体的时间片一开始就发动攻击,而且艾希立刻中毒。
说明
- 假定给定时间序列的长度不会超过10000。
- 假定提莫攻击的时间序列和他的中毒持续时间都是非负整数,不会超过10000000。
样例
- 样例 1:
样例: [1,4], 2
输出: 4
解释: 在第1秒开头, 提莫攻击了艾希,艾希立刻中毒。
这次中毒持续2秒,直到第2秒末尾。
在第4秒开头, 提莫又攻击了艾希, 又让艾希中毒了2秒。.
所以最终结果是4.
- 样例 2:
输入: [1,2], 2
输出: 3
解释: 在1秒钟开头, 提莫攻击了艾希,艾希立刻中毒。
这次中毒持续2秒,直到第2秒末尾。
然而,第2秒初,提莫又攻击了艾希,而艾希还处在中毒态。
由于中毒态不会叠加, 所以中毒态会在3秒末停止。
所以,最终返回3。
挑战
显然你可以直接 return a + b,但是你是否可以挑战一下不这样做?(不使用++等算数运算符)
解析
findPoisonedDuration = function (timeSeries, duration) {
if (timeSeries == null || timeSeries.length == 0 || duration == 0) {
return 0;
}
result = 0, start = timeSeries[0], end = timeSeries[0] + duration;
for (i = 1; i < timeSeries.length; i++) {
if (timeSeries[i] > end) {
result += end - start;
start = timeSeries[i];
}
end = timeSeries[i] + duration;
}
result += end - start;
return result;
}