55 Juego de saltos (bfs)

1. Descripción del problema:

Dada una matriz de enteros no negativos, inicialmente se encuentra en la primera posición de la matriz.

Cada elemento de la matriz representa la longitud máxima que puede saltar en esa posición.

Determine si puede alcanzar la última posición.

Ejemplo 1:

Entrada: [2,3,1,1,4]
Salida: verdadero
Explicación: Podemos saltar 1 paso desde la posición 0 a la posición 1, luego saltar 3 pasos desde la posición 1 a la última posición.
Ejemplo 2

Entrada: [3,2,1,0,4]
Salida: falso
Explicación: Pase lo que pase , siempre alcanzará el índice 3. Pero la longitud máxima de salto de esta posición es 0, por lo que nunca puede llegar a la última posición.

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/jump-game

2. Análisis de pensamiento:

① Después de leer la pregunta, puede encontrar que la esencia de esta pregunta es bfs. La característica típica son los pasos mínimos requeridos desde el estado original al estado objetivo. Sin embargo, esto es lo que cambió la resolución del problema. Si la solución es llegar al final Estado objetivo, pero la solución es esencialmente una cosa. Se puede decir que el problema típico de bfs es relativamente simple. Se puede completar la operación normal usando bfs más los requisitos del problema

② La solución típica de bfs es usar una cola. Podemos crear una clase interna para representar el nodo actual. El nodo necesita un atributo para indicar la posición del nodo actual. El tipo de datos de la cola es el tipo de nodo actual, porque aquí solo involucra el nodo actual. Por lo tanto, también puede establecer el tipo de datos del elemento de la cola de la cola en Integer, pero cuando usa bfs antes, está acostumbrado a usar clases internas, agrega el nodo de inicio a la cola, ejecuta el ciclo cuando la cola no está vacía y abre la cola al comienzo del ciclo. Elemento, en el bucle for, determine si la posición actual puede alcanzar la posición detrás de ella. Si puede alcanzar otra posición, agregue este nodo a la cola y asigne la posición correspondiente a la matriz de marcas de la posición a 1, la matriz de marcas es principalmente Para repetir la visita a la ubicación que se ha visitado antes, porque si puede llegar a esta ubicación antes, significa que la ruta de la solución anterior es la más corta, y llegará a esta ubicación después, pero se ha marcado que no es la más corta.

③ Cuando el nodo aparece al comienzo del ciclo, determine si la posición del elemento actual es la longitud de la matriz menos 1, si significa que se puede alcanzar, si hace más de este problema de bfs, naturalmente formará un reflejo condicionado, porque el problema contiene el uso obvio de bfs Una característica que puede resolverse y luego combinarse con la rutina bfs y los requisitos del problema pueden resolverse fácilmente

3. El código es el siguiente:

class Solution {
     public class Node{
        private int pos;
        /*当前节点的位置*/
        public Node(int pos) {
            this.pos = pos;
        }
    }
    public boolean canJump(int[] nums) {
        int len = nums.length;
        Queue<Node> queue = new LinkedList<>();
        queue.add(new Node(0));
        /*标记数组用来标记已经被访问过的位置先标记过的说明之前到达这个节点的路径比较短*/
        int vis[] = new int[len];
        vis[0] = 1;
        while (!queue.isEmpty()){
            Node poll = queue.poll();
            int curPos = poll.pos;
            if (curPos == len - 1) return true;
            for (int i = 1; i <= nums[curPos]; ++i){
                /*未被访问过*/
                if (curPos + i < len && vis[curPos + i] != 1){
                    Node newNode = new Node(curPos + i);
                    queue.add(newNode);
                    //标记已经被访问过了
                    vis[curPos + i] = 1;
                }
            }
        }
        return false;
    }
}

 

569 artículos originales publicados · Me gusta 153 · Visitas 590,000+

Supongo que te gusta

Origin blog.csdn.net/qq_39445165/article/details/105354495
Recomendado
Clasificación