Teemo Attacking
https://leetcode.com/problems/teemo-attacking | Easy |
Условие
Дан массив timeSeries, где timeSeries[i] указывает на момент, когда атакует персонаж Teemo, и целое число duration, которое представляет длительность отравления от каждой атаки. Если Teemo атакует, то цель будет отравлена в течение duration единиц времени, начиная с момента атаки. Если Teemo атакует снова до того, как предыдущее отравление закончится, время отравления будет продлено. Нужно вычислить общее время, в течение которого цель будет отравлена.
Примеры
Input:
timeSeries = [1,4], duration = 2Output:
4Explanation:
Цель отравлена с момента 1 до момента 3 и с момента 4 до момента 6, общее время — 4.
Input:
timeSeries = [1,2], duration = 2Output:
3Explanation:
Цель отравлена с момента 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), так как используется только фиксированное количество дополнительных переменных.