Общее время, в течение которого герой будет находиться в шоке
Дана атака массивом, содержащая 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])
Теперь, чтобы решить эту проблему, выполните следующие действия:
- Создайте переменную totalTime для хранения ответа на эту задачу.
- Создайте переменную prev и инициализируйте ее для атаки[0]. Эта переменная будет хранить время окончания предыдущей атаки для каждой отдельной атаки.
- Запустите цикл от i=0 до i<N и на каждой итерации:
- Добавьте ударное время атаки [i] i, e. (attack[i] + D) – max(prev, Attack[i]) to totalTime .
- Измените prev на время окончания предыдущей атаки, поэтому prev=attack[i]+D .
- Верните totalTime в качестве ответа после завершения цикла.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N)
Вспомогательное пространство: O(1)