Общее время, в течение которого герой будет находиться в шоке

Опубликовано: 20 Сентября, 2022

Дана атака массивом, содержащая N целых чисел в неубывающем порядке и целое число D . Каждый элемент в массиве Attack обозначает время, когда герой подвергается нападению в игре, а D обозначает продолжительность, в течение которой герой будет в шоке и не сможет дать отпор. Задача состоит в том, чтобы найти общее время, в течение которого герой будет находиться в состоянии шока.

Пример:

Input: attack = [1, 4], d= 2
Output: 4
Explanation:
At second 1, Hero is attacked, and stay in shock for seconds 1 and 2.
At second 4, Hero is attacked, and stay in shock for seconds 4 and 5.
which is 4 seconds in total.

Input: attack = [1, 2], d= 2
Output: 3
Explanation:
At second 1,  Hero is attacked, and stay in shock  for seconds 1 and 2.
At second 2,  Hero is attacked, and stay in shock for seconds 2 and 3.
which is 3 seconds in total.

Подход: Рассчитайте время, в течение которого герой будет находиться в шоке, по формуле:

Shock time for attack[i] = (attack[i]+D) – max(Time at which the previous attack ends, attack[i])

Теперь, чтобы решить эту проблему, выполните следующие действия:

  1. Создайте переменную totalTime для хранения ответа на эту задачу.
  2. Создайте переменную prev и инициализируйте ее для атаки[0]. Эта переменная будет хранить время окончания предыдущей атаки для каждой отдельной атаки.
  3. Запустите цикл от i=0 до i<N и на каждой итерации:
    • Добавьте ударное время атаки [i] i, e. (attack[i] + D) – max(prev, Attack[i]) to totalTime .
    • Измените prev на время окончания предыдущей атаки, поэтому prev=attack[i]+D .
  4. Верните totalTime в качестве ответа после завершения цикла.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N)
Вспомогательное пространство: O(1)