Рубрики
Без рубрики

Решение: Jump Game II

Это является частью серии объяснений решений LeetCode (индекс). Если вам понравилось это решение или fou … с меткой алгоритмы, JavaScript, Java, Python.

LeetCode Solutions (161 серия деталей)

Это является частью серии объяснений решения LeetCode ( index ). Если вам понравилось это решение или нашли его полезным, Пожалуйста, нравится Этот пост и/или upvote Мое решение по сообщению на форумах LeetCode Анкет

Проблема LeetCode #45 (Medium): Прыжок Игра II

Описание:

( прыгнуть в : Идея решения Код : JavaScript | Python | Java | C ++

Учитывая множество неотрицательных целых чисел Nums Вы первоначально расположены в первом индексе массива.

Каждый элемент в массиве представляет максимальную длину прыжка в этом положении.

Ваша цель – достичь последнего индекса в минимальном количестве прыжков.

Вы можете предположить, что вы всегда можете достичь последнего индекса.

Примеры:

Вход: Nums = [ 2,3,1,1,4]
Выход: 2
Объяснение: Минимальное количество прыжков до достижения последнего индекса составляет 2. Прыгните 1 шаг от индекса от 0 до 1, затем 3 шага до последнего индекса.
Вход: Nums = [ 2,3,0,1,4]
Выход: 2

Ограничения:

  • 1. длиной
  • 0 [i]^5

Идея:

( Прыгните к : Описание задачи Код : JavaScript | Python | Java | C ++

Поскольку каждый элемент нашего входного массива ( n ) представляет максимальную длину прыжка, а не определенную длину прыжка, это означает, что мы можем посетить любой индекс между текущим индексом ( i ) и i + n [i] Анкет Растягивая это до его логического вывода, мы можем безопасно итерация через N При отслеживании самого дальнего индекса ( следующий ) в любой момент ( Далее (следующий, i + n [i]) ) Мы будем знать, что нашли наше решение один раз Следующий достигает или передает последний индекс ( next.length – 1 ).

Трудность заключается в том, чтобы отслеживать, сколько прыжков требуется для достижения этой точки. Мы не можем просто посчитать количество раз, когда мы обновляем Следующий , как мы можем видеть, это происходит более одного раза, пока все еще находятся в диапазоне нынешних прыжков. На самом деле, мы не можем быть уверены в лучшем следующем прыжке, пока не достигнем конца текущего диапазона прыжков.

Итак, в дополнение к Следующий , нам также нужно отслеживать конечную точку Jump ( curr ), а также количество прыжков, взятых до сих пор ( ans ).

Поскольку мы захотим вернуть ANS В самой ранней возможности мы должны основывать его на Следующий , как отмечалось ранее. С тщательными начальными определениями для карт и следующий , мы можем начать нашу итерацию в i и Анс Без необходимости выражения возврата корпуса.

  • Сложность времени: O (n) где n – длина n
  • Сложность пространства: O (1)

Реализация:

Есть только незначительные различия в коде всех четырех языков.

Код JavaScript:

( Прыгните к : Описание задачи Идея решения

var jump = function(N) {
    let len = N.length - 1, curr = -1, next = 0, ans = 0
    for (let i = 0; next < len; i++) {
        if (i > curr) ans++, curr = next
        next = Math.max(next, N[i] + i)
    }
    return ans
};

Код Python:

( Прыгните к : Описание задачи Идея решения

class Solution:
    def jump(self, N: List[int]) -> int:
        Nlen, curr, nxt, ans, i = len(N) - 1, -1, 0, 0, 0
        while nxt < Nlen:
            if i > curr:
                ans += 1
                curr = nxt
            nxt = max(nxt, N[i] + i)
            i += 1
        return ans

Код Java:

( Прыгните к : Описание задачи Идея решения

class Solution {
    public int jump(int[] N) {
        int len = N.length - 1, curr = -1, next = 0, ans = 0;
        for (int i = 0; next < len; i++) {
            if (i > curr) {
                ans++;
                curr = next;
            };
            next = Math.max(next, N[i] + i);
        };
        return ans;
    };
};

C ++ Код:

( Прыгните к : Описание задачи Идея решения

class Solution {
public:
    int jump(vector& N) {
        int len = N.size() - 1, curr = -1, next = 0, ans = 0;
        for (int i = 0; next < len; i++) {
            if (i > curr) ans++, curr = next;
            next = max(next, N[i] + i);
        };
        return ans;
    }
};

LeetCode Solutions (161 серия деталей)

Оригинал: “https://dev.to/seanpgallivan/solution-jump-game-ii-cn3”