假设在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