1. 问题描述:在撸啊撸世界中,提莫的普通攻击(吹箭)自带箭毒伤害,每一次吹箭击中敌人(以下假想敌为艾希),艾希都会受到持续特定时间的箭毒伤害。但箭毒伤害不会叠加,只会把之前的持续时间结束并立即刷新开始计算持续时间。问题是给定一个提莫攻击的时间点组成的数组timeSeries,以及固定的箭毒持续时间duration,写出算法计算出艾希一共会受到多少时间的箭毒伤害。
例子:
输入:[1, 2, 4, 6], 1
输出:4
解释:提莫在时间点1攻击艾希,箭毒生效并持续了1秒到达攻击时间点2时,箭毒刷新并重计时2秒,因此一共会受到3秒伤害。
2. C++代码实现
#include <iostream>
#include <vector>
using namespace std;
int calculatePoisonedDuration(vector<int> timeSeries, int dur){
if(timeSeries.empty() || timeSeries.size()==0 || dur <= 0)
return -1;
int poisonedTime = 0;
int start = timeSeries[0];
for(int i = 1; i < timeSeries.size(); i ++){
if(timeSeries[i] < timeSeries[i-1])
return -1;
else if(timeSeries[i] >= start + dur)
poisonedTime += dur;
else
poisonedTime = poisonedTime + dur - start;
start = timeSeries[i];
}
poisonedTime += dur;
return poisonedTime;
}
int main(){
vector<int> timeSeries{1, 2, 4, 6};
int duration = 1;
int poisonedTimes = calculatePoisonedDuration(timeSeries, duration);
cout << poisonedTimes << endl;
return 0;
}
网友评论