Leetcode brushing record-55. Juego de saltos

Inserte la descripción de la imagen aquí

Esta pregunta no se entendió al principio, así que reitere los requisitos de la pregunta:

Dada una lista nums, saltamos hacia atrás desde el elemento 0,
la distancia más larga a la que podemos saltar al principio es nums [0],
es decir, podemos elegir saltar a
{1,2, ... en el primer paso , nums [0]},
luego, suponiendo que saltamos a a, podemos continuar saltando. El
rango de salto opcional es {a + 1, ..., a + nums [a]}
Salta así hasta que saltemos al final ,
Si esto puede saltar hasta el final, devolvemos verdadero, de lo contrario devuelve falso

Ordene la idea: esto se puede resolver con un algoritmo codicioso.
Esperamos saltar al lugar más alejado después de cada salto.
Por lo tanto, primero calculamos la posición más lejana
que se puede saltar desde cada posición porque cada uno de los números El significado de los elementos es la distancia más lejana
que se puede saltar desde aquí, y la posición más lejana que se puede alcanzar desde nums [i] se puede expresar como i + nums [i].
Por lo tanto, primero calculamos
nums = para cada elemento de nums = [i + nums [i] para i, valor en enumerate (nums)]
Ahora el significado del elemento i-th en nums es que si saltamos desde la posición i-th,
podemos saltar a la posición más lejana.
Nuestra estrategia de salto es
Comenzando desde nums [0], salte a la posición más lejana que se pueda
alcanzar cada vez. Por ejemplo, para nums = [3,2,1,0,4], después del cálculo, nums = [3,3,3,3,8]
entonces podemos saltar desde la primera posición a 0, 2, 3
hemos elegido nums [1: 4] Ese nums [1], nums [2 ], nums [3] el mayor
ha sido tan salto hasta el último
Salte a la última posición: Verdadero
o atascado en una posición (es decir, la posición tempmax que se puede alcanzar aún no ha llegado al final y este valor permanece sin cambios después de dos saltos consecutivos): Falso

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        length = len(nums)
        nums = [nums[i] + i for i in range(length)]
        start = 0
        last = 0
        this = 0
        while this < length - 1:#还没到
            if start == 1 and this == last:
                return False
            elif start == 0:
                start = 1
            end = nums[this]
            if end >= length - 1:
                return True
            templist = nums[last:end+1]#last+1
            tempmax = max(templist)
            last = this
            this = tempmax 
            print(last,this)
            if this == end and this < length - 1:
                return False
        return True
Publicado 43 artículos originales · elogiado 14 · 20,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_41545780/article/details/105320284
Recomendado
Clasificación