Teemo Attacking

https://leetcode.com/problems/teemo-attackingEasy

Условие

Дан массив timeSeries, где timeSeries[i] указывает на момент, когда атакует персонаж Teemo, и целое число duration, которое представляет длительность отравления от каждой атаки. Если Teemo атакует, то цель будет отравлена в течение duration единиц времени, начиная с момента атаки. Если Teemo атакует снова до того, как предыдущее отравление закончится, время отравления будет продлено. Нужно вычислить общее время, в течение которого цель будет отравлена.

Примеры

Input: timeSeries = [1,4], duration = 2

Output: 4

Explanation: Цель отравлена с момента 1 до момента 3 и с момента 4 до момента 6, общее время — 4.
Input: timeSeries = [1,2], duration = 2

Output: 3

Explanation: Цель отравлена с момента 1 до момента 3 и с момента 2 до момента 4, общее время — 3.

Решение

fun findPoisonedDuration(timeSeries: IntArray, duration: Int): Int {
    if (timeSeries.isEmpty()) return 0  // Если атак нет, общее время отравления равно 0

    var totalDuration = 0

    for (i in 0 until timeSeries.size - 1) {
        // Если атака накладывается, добавляем время до следующей атаки, иначе — полную длительность
        totalDuration += minOf(duration, timeSeries[i + 1] - timeSeries[i])
    }

    // Добавляем отравление от последней атаки
    totalDuration += duration

    return totalDuration
}

Временная сложность

O(n), где n — длина массива timeSeries, так как мы проходим по массиву один раз.

Пространственная сложность

O(1), так как используется только фиксированное количество дополнительных переменных.