Сложность: medium
Вам дан массив целых чисел
nums длины n, где каждый элемент nums[i] представляет максимальную длину прыжка вперёд с индекса i. Изначально вы находитесь на
nums[0]. Нужно вернуть минимальное количество прыжков, необходимых для достижения последнего элемента массива
nums[n - 1]. Гарантируется, что добраться до конца можно.
Пример:
Input: nums = [2,3,1,1,4] Output: 2
👨💻 Алгоритм:
1⃣Начало — текущие настройки— его конец ,Завести три переменные: near— начало стандартной настройки, far— его конец, jumps— количество прыжков.
2⃣Не достиг конца массива , находим максим.) в пределах текущей позиции ( доНе farдойдя до конца массива, находим ступеньку достижимой позиции ( farthest) в пределах текущей позиции ( nearдо far).
3⃣Обновляем границы границы ( nearи far) и увеличиваем счётчик прыжков.
😎 Решение:
class Solution {
public int jump(int[] nums) {
int near = 0, far = 0, jumps = 0;
while (far < nums.length - 1) {
int farthest = 0;
for (int i = near; i <= far; i++) {
farthest = Math.max(farthest, i + nums[i]);
}
near = far + 1;
far = farthest;
jumps++;
}
return jumps;
}
}Ставь 👍 и забирай 📚 Базу знаний