Leetcode之Teemo Attacking 问题

问题描述:

In LOL world, there is a hero called Teemo and his attacking can make his enemy Ashe be in poisoned condition. Now, given the Teemo's attackingascending 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.

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.

示例一:

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.

示例二:

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.

问题来源:Teemo Attacking (详细地址:https://leetcode.com/problems/teemo-attacking/description/)

思路分析:题目那么一大片,吓死人啊都,但是题目的意思很简单,和Insert Interval 有点像,题目的意思就是数组中的每个元素表示每个时刻,然后后面的数字表示中毒持续的时间,最后求的是总共中毒的时间,题目我就不翻译了,在这拿两个例子解释下:

第一个例子:在第一分钟中毒,持续时间为2,所以可以持续到第三分钟,接着我们又在第四分钟施毒,又持续两分钟,这样就到第6分钟了,所以总共的中毒时间是4分钟。

第二个例子:在第一分钟中毒,本来是可以持续到第三分钟的,我在第二分钟再施一次毒,原来只可以到第三分钟的中毒时间,现在可以到第四分钟了,所以总共中毒时间为3分钟。

我们可以这样解答这道题:两个指针,一个为start,另外一个为end,如果新的时间片(是不是有点像Insert Interval中的那个new Interval?)的start大于正在执行的时间片的end,说明有交集,我们就更新它的end为新的值;相反,如果没有交集的话,我们就计算出上一段的时间片的大小,接着重新指定start和end指针。注意:记得最后还得把最后一次时间片的时间累加上。因为有重叠的时候计算的是上一次的时间片大小,而最后一次没有机会重叠了,所以记得加上!

代码:

复杂版:

简化版(其实也就是少写了一句代码):




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值