Teemo C ++攻击

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