难度等级:Medium
题目:
In LLP world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned condition. Now, given the Teemo's attacking ascending time series towards Ashe and the poisoning time duration per Teemo's attacking, you need to output the total time that Ashe is in poisoned condition.
You may assume that Teemo attacks at the very beginning of a specific time point, and makes Ashe be in poisoned condition immediately.
Example 1:
Input: [1,4], 2 Output: 4 Explanation: At time point 1, Teemo starts attacking Ashe and makes Ashe be poisoned immediately.
This poisoned status will last 2 seconds until the end of time point 2.
And at time point 4, Teemo attacks Ashe again, and causes Ashe to be in poisoned status for another 2 seconds.
So you finally need to output 4.
Example 2:
Input: [1,2], 2 Output: 3 Explanation: At time point 1, Teemo starts attacking Ashe and makes Ashe be poisoned.
This poisoned status will last 2 seconds until the end of time point 2.
However, at the beginning of time point 2, Teemo attacks Ashe again who is already in poisoned status.
Since the poisoned status won't add up together, though the second poisoning attack will still work at time point 2, it will stop at the end of time point 3.
So you finally need to output 3.
Note:
- You may assume the length of given time series array won't exceed 10000.
- You may assume the numbers in the Teemo's attacking time series and his poisoning time duration per attacking are non-negative integers, which won't exceed 10,000,000.
题目翻译:
在LLP世界里,有一个英雄叫Teemo,他的攻击可以使他的敌人阿什处于中毒状态。现在,考虑到Teemo的攻击上升时间序列朝向Ashe和每个Teemo的攻击的中毒持续时间,你需要输出Ashe在中毒状态的总时间。
你可以假设Teemo在特定时间点的开始攻击,并使Ashe立即处于中毒状态。
实施例1:
输入:[1,4],2
输出:4
说明:在时间点1,Teemo开始攻击Ashe,并立即使Ashe中毒。
此中毒状态将持续2秒,直到时间点2结束。
在时间点4,Teemo再次攻击Ashe,并导致Ashe在中毒状态下再持续2秒。
所以你终于需要输出4。
实施例2:
输入:[1,2],2
输出:3
说明:在时间点1,Teemo开始攻击Ashe,并使Ashe中毒。
此中毒状态将持续2秒,直到时间点2结束。
然而,在时间点2的开始,Teemo再次攻击Ashe谁已经在中毒状态。
由于中毒状态不会一起累加,虽然第二中毒攻击在时间点2仍然工作,它将在时间点3结束时停止。
所以你终于需要输出3。
注意:
您可以假定给定时间序列数组的长度不超过10000。
你可以假定Teemo的攻击时间系列中的数字,每次攻击的中毒时间是非负整数,不超过10,000,000。
代码:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
//若输入为空返回0,输入仅一个元素则返回duration
if(timeSeries.size()==0) return 0;
if(timeSeries.size() == 1) return duration;
int sum = 0,begin = 0;
begin = timeSeries[0];
//将当前元素加上持续时间 与 下一个时间点比较,
//若不大于则说明时间间断小于持续时间,总时间加上间断时间
//反之,则说明间断时间大于持续时间,总时间加上持续时间,循环至最后一个时间点
for(int i = 1;i <timeSeries.size();i++) {
if(begin+duration <= timeSeries[i]) {
sum+=duration;
}else{
sum+= timeSeries[i]-begin;
}
begin = timeSeries[i];
}
//返回时间综合加上最后一个时间点的持续时间
return sum+duration;
}
};
int main() {
//测试
Solution s;
int a[] = {1,4}, m=4;
vector<int> v(a,a+2);
//答案为 7
cout<<s.findPoisonedDuration(v,m);
}
提交状态: