Рубрики

Программа Java для минимального количества прыжков, чтобы достичь конца

Дан массив целых чисел, где каждый элемент представляет максимальное количество шагов, которые можно сделать вперед из этого элемента. Напишите функцию, которая будет возвращать минимальное количество прыжков для достижения конца массива (начиная с первого элемента). Если элемент равен 0, то не может пройти через этот элемент.

Пример:

Input: arr[] = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9}
Output: 3 (1-> 3 -> 8 ->9)

Первый элемент равен 1, поэтому можно перейти только к 3. Второй элемент равен 3, поэтому можно сделать не более 3 шагов, например, до 5, 8 или 9.

// Явапрограмма для поиска минимума
// количество прыжков до конца

import java.util.*;

import java.io.*;

  

class GFG {

    // Возвращает минимальное количество

    // прыгает, чтобы достичь arr [h] от arr [l]

    static int minJumps(int arr[], int l, int h)

    {

        // Базовый случай: когда источник

        // и пункт назначения одинаков

        if (h == l)

            return 0;

  

        // Когда ничего не достижимо

        // из данного источника

        if (arr[l] == 0)

            return Integer.MAX_VALUE;

  

        // Обход всех точек

        // достижимо из arr [l]. Рекурсивный

        // получаем минимальное количество прыжков

        // необходимо достичь arr [h] из этих

        // достижимые точки.

        int min = Integer.MAX_VALUE;

        for (int i = l + 1; i <= h && i <= l + arr[l]; i++) {

            int jumps = minJumps(arr, i, h);

            if (jumps != Integer.MAX_VALUE && jumps + 1 < min)

                min = jumps + 1;

        }

        return min;

    }

  

    // Код драйвера

    public static void main(String args[])

    {

        int arr[] = { 1, 3, 6, 3, 2, 3, 6, 8, 9, 5 };

        int n = arr.length;

        System.out.print("Minimum number of jumps to reach end is "

                         + minJumps(arr, 0, n - 1));

    }

}

  
// Этот код предоставлен Sahil_Bansall

Выход:

Minimum number of jumps to reach end is 4

Метод 2 (динамическое программирование)
В этом методе мы строим массив jumps [] слева направо так, что jumps [i] указывает минимальное количество переходов, необходимое для достижения arr [i] из arr [0]. Наконец, мы возвращаем прыжки [n-1].

Джава

// JAVA-код для минимального количества прыжков до конца

class GFG {

  

    private static int minJumps(int[] arr, int n)

    {

        int jumps[] = new int[n]; // прыжки [n-1] будут содержать

        // результат

        int i, j;

  

        if (n == 0 || arr[0] == 0)

            return Integer.MAX_VALUE; // если первый элемент равен 0,

        // конец не может быть достигнут

  

        jumps[0] = 0;

  

        // Находим минимальное количество прыжков для достижения arr [i]

        // из arr [0] и присваиваем это значение jumps [i]

        for (i = 1; i < n; i++) {

            jumps[i] = Integer.MAX_VALUE;

            for (j = 0; j < i; j++) {

                if (i <= j + arr[j] && jumps[j] != Integer.MAX_VALUE) {

                    jumps[i] = Math.min(jumps[i], jumps[j] + 1);

                    break;

                }

            }

        }

        return jumps[n - 1];

    }

  

    // программа драйвера для проверки вышеуказанной функции

    public static void main(String[] args)

    {

        int arr[] = { 1, 3, 6, 1, 0, 9 };

  

        System.out.println("Minimum number of jumps to reach end is : " + minJumps(arr, arr.length));

    }

}

  
// Этот код предоставлен Арнавом Кр. Мандал.

Выход:

Minimum number of jumps to reach end is : 3

Пожалуйста, обратитесь к полной статье на Минимальное количество прыжков, чтобы достичь конца для более подробной информации!

Рекомендуемые посты:

Программа Java для минимального количества прыжков, чтобы достичь конца

0.00 (0%) 0 votes