C++ 中 Teemo 的攻击


假设在 LOL 世界中,有一个名叫提莫的英雄,他的攻击能让他的敌人艾希处于中毒状态。现在,假设我们给出了提莫对艾希的攻击时间递增时间序列以及每次提莫攻击的中毒时间持续时间,我们必须找出艾希处于中毒状态的总时间。我们可以假设提莫在特定时间点的开始攻击,并立即让艾希处于中毒状态。

输入类似于 [1,4] 和 2,那么输出将是 4。这是因为在时间点 1,提莫开始攻击艾希并立即让艾希中毒。此中毒状态将持续到时间点 2 结束。在时间点 4,提莫再次攻击该敌人,使艾希中毒状态又持续 2 秒。所以你最终需要输出 4。

要解决此问题,我们将遵循以下步骤 −

  • 设定 ret := 0
  • currEnd := -1
  • n := t 的大小
  • 对于 i 在范围 0 到 n – 1 内
    • 开始 := t[i],结束 := t[i] + d – 1
    • 如果 currEnd < 开始,那么 ret := ret + 结束 – 开始 + 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

更新时间: 02-May-2020

84 次查看

开启你的 职业生涯

通过完成该课程,获得认证

开始
广告
© . All rights reserved.