495. Teemo Attacking
leetcode easy
Task
Наш герой Тимо атакует врага Эшу ядовитыми атаками! Когда Тимо атакует Эшу, она оказывается отравленной на ровно duration секунд. Более формально, атака в секунду t означает, что Эша будет отравлена в течение интервала времени [t, t + duration - 1] включительно. Если Тимо атакует снова до окончания эффекта яда, таймер для него сбрасывается, и эффект яда закончится через duration секунд после новой атаки.
Вам дано неубывающее целое число timeSeries, где timeSeries[i] обозначает, что Тимо атакует Эшу во вторую timeSeries[i], и целое число duration.
Верните общее количество секунд, в течение которых Эша была отравлена.
Пример:
Input: timeSeries = [1,4], duration = 2
Output: 4
Explanation: Teemo's attacks on Ashe go as follows:
- At second 1, Teemo attacks, and Ashe is poisoned for seconds 1 and 2.
- At second 4, Teemo attacks, and Ashe is poisoned for seconds 4 and 5.
Ashe is poisoned for seconds 1, 2, 4, and 5, which is 4 seconds in total.
C# solution
matched/originalpublic class Solution {
public int FindPoisonedDuration(int[] timeSeries, int duration) {
int n = timeSeries.Length;
if (n == 0) return 0;
int total = 0;
for (int i = 0; i < n - 1; ++i) {
total += Math.Min(timeSeries[i + 1] - timeSeries[i], duration);
}
return total + duration;
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int FindPoisonedDuration(vector<int>& timeSeries, int duration) {
int n = timeSeries.size();
if (n == 0) return 0;
int total = 0;
for (int i = 0; i < n - 1; ++i) {
total += min(timeSeries[i + 1] - timeSeries[i], duration);
}
return total + duration;
}
}Java solution
matched/originalclass Solution {
public int findPoisonedDuration(int[] timeSeries, int duration) {
int n = timeSeries.length;
if (n == 0) return 0;
int total = 0;
for(int i = 0; i < n - 1; ++i)
total += Math.min(timeSeries[i + 1] - timeSeries[i], duration);
return total + duration;
}
}JavaScript solution
matched/originalclass Solution {
findPoisonedDuration(timeSeries, duration) {
const n = timeSeries.length;
if (n === 0) return 0;
let total = 0;
for (let i = 0; i < n - 1; i++) {
total += Math.min(timeSeries[i + 1] - timeSeries[i], duration);
}
return total + duration;
}
}Python solution
matched/originalclass 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 + durationGo solution
matched/originalfunc findPoisonedDuration(timeSeries []int, duration int) int {
n := len(timeSeries)
if n == 0 {
return 0
}
total := 0
for i := 0; i < n-1; i++ {
total += min(timeSeries[i+1]-timeSeries[i], duration)
}
return total + duration
}
func min(a, b int) int {
if a < b {
return a
}
return b
}Explanation
Algorithm
Инициализация
Инициализируйте переменную total для хранения общего времени, в течение которого Эша была отравлена. Проверьте, если массив timeSeries пуст, верните 0.
Итерация
Пройдите по всем элементам массива timeSeries, кроме последнего. На каждой итерации добавьте к total минимальное значение между длительностью интервала и временем действия яда duration.
Возврат результата
Верните сумму total и duration, чтобы учесть последнюю атаку.
😎