假设在LOL世界中,有一个名为Teemo的英雄,他的攻击可以使他的敌人Ashe处于中毒状态。现在,假设我们已经给出了Teemo对Ashe的攻击上升时间序列以及每次Teemo攻击的中毒持续时间,我们必须找到Ashe处于中毒状态的总时间。我们可以假设Teemo在特定时间点的一开始就发动攻击,并使Ashe立即处于中毒状态。
输入类似于[1,4]和2,然后输出将为4。这是因为在时间点1,Teemo开始攻击Ashe并使Ashe立即中毒。在这里,这种中毒状态将持续2秒,直到时间点2结束为止。在时间点4,Teemo再次攻击该敌人,并使Ashe处于中毒状态,持续2秒。因此,您最终需要输出4。
为了解决这个问题,我们将遵循以下步骤-
设置ret:= 0
currEnd:= -1
n:= t的大小
对于i,范围为0至n – 1
开始:= t [i],结束:= t [i] + d – 1
如果currEnd <开始,则ret:= ret + end –开始+ 1,currEnd =结束,
否则ret:= ret + end – currEnd,currEnd:= end
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findPoisonedDuration(vector<int>& t, int d) {
int ret = 0;
int currEnd = -1;
int n = t.size();
for(int i = 0; i < n; i++){
int start = t[i];
int end = t[i] + d - 1;
if(currEnd < start){
ret += end - start + 1;
currEnd = end;
} else {
ret += end - currEnd;
currEnd = end;
}
}
return ret;
}
};
main(){
vector<int> v = {1,4};
Solution ob;
cout << (ob.findPoisonedDuration(v, 2));
}[1,4] 4
输出结果
4