1.1 Array 495.Teemo Attacking

本文介绍了一种算法,用于计算英雄Teemo攻击敌方Ashe时造成的中毒总时间。通过分析Teemo攻击的时间序列和每次攻击的中毒持续时间,文章提供了一个C++实现示例,演示如何计算出Ashe处于中毒状态的总时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

难度等级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:

  1. You may assume the length of given time series array won't exceed 10000.
  2. 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);	
} 


提交状态:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值