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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言
C++
C#
MongoDB
MySQL
Javascript
PHP