In this Leetcode Teemo Attacking problem solution Our hero Teemo is attacking an enemy Ashe with poison attacks! When Teemo attacks Ashe, Ashe gets poisoned for a exactly duration seconds. More formally, an attack at second t will mean Ashe is poisoned during the inclusive time interval [t, t + duration - 1]. If Teemo attacks again before the poison effect ends, the timer for it is reset, and the poison effect will end duration seconds after the new attack.

You are given a non-decreasing integer array timeSeries, where timeSeries[i] denotes that Teemo attacks Ashe at second timeSeries[i], and an integer duration.

Return the total number of seconds that Ashe is poisoned.

Leetcode Teemo Attacking problem solution

Problem solution in Python.

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        ret = len(timeSeries) * duration          # first, sum up all
        for i in range(len(timeSeries)-1):
            if timeSeries[i+1] - timeSeries[i] < duration:   
                ret -= (duration - (timeSeries[i+1] - timeSeries[i]))  # and then, weep out
        return ret

Problem solution in Java.

class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {        
        if(timeSeries.length==0) return 0;
        int result=0;       
        for(int i=1; i<timeSeries.length; i++){           
            if(timeSeries[i-1]+duration <= timeSeries[i]) result+=duration;
                result+= timeSeries[i] - timeSeries[i-1];
        return result;

Problem solution in C++.

int findPoisonedDuration(vector<int>& timeSeries, int duration) {
    int total = 0;
    for (int i = 0; i < timeSeries.size(); i++) 
        total += (i > 0 && timeSeries[i] - timeSeries[i-1] < duration ? timeSeries[i] - timeSeries[i - 1] : duration);
    return total;