仔细读题,我们可以发现,其实只需要一次遍历就可以解决问题:设置一个统计中毒时间的变量,然后从第一个到倒数第二个遍历,如果后一个的数-这个数
比中毒的持续时间
大,也就是此时中毒的持续时间
已经结束,但是只能中毒duration的时间;如果后一个的数-这个数
比中毒的持续时间
小,也就是还没等中毒的持续时间
结束又一次进行攻击,那么由于中毒状态不能叠加,那么此时的中毒时间就是后一个的数-这个数
。最后记得加上中毒的持续时间
class Solution:
def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
n = len(timeSeries)
if n == 0:
return 0
total = 0
for i in range(n - 1):
total += min(timeSeries[i + 1] - timeSeries[i],duration)
return total + duration
时间复杂度:O(N),N为数组的长度
空间复杂度为:O(1)