Record de brossage Leetcode-45. Jeu de saut II

Insérez la description de l'image ici

Je ne comprends pas pourquoi la difficulté de cette question est "difficile"

Le titre signifie que, étant donné une liste, à partir de la position [0], vous pouvez sauter jusqu'à nums [0] à la fois.
Choisissez une stratégie pour atteindre la fin de l'équipe et le nombre minimum de sauts (étant donné que la fin de l'équipe doit être atteinte)

Notre stratégie:
nous ajoutons d'abord i à chaque élément du tableau d'entrée nums [i], afin que nous obtenions un nouveau tableau, la signification est de décoller de chaque position, la position la plus éloignée peut être
mémorisée, à partir de maintenant nums ce qui signifie des changements, le tableau d'entrée est plus
nous de nums [0], définissez le compteur
chaque regard de temps à la queue peut sauter directement à partir nums [i], si possible, directement somme retournée + 1
, sinon, nous En regardant les nombres dans la gamme la plus éloignée, nous pouvons sauter, lequel est le plus grand?
(C'est parce que nous devons considérer le nombre minimum de sauts jusqu'à la fin, puis chaque fois que nous devons choisir le tremplin du milieu qui est le plus proche de la fin de l'équipe après le saut.)
Il y a un cas particulier ici, en supposant qu'il existe plusieurs maximums égaux, nous prenons le plus La valeur maximale derrière est le tremplin.
Ensuite, nous sautons à ce tremplin et commençons le saut suivant

class Solution:
    def jump(self, nums: List[int]) -> int:
        suma = 0
        length = len(nums)
        nums = [i + value for i,value in enumerate(nums)]
        print(nums)
        this = 0
        while this < length - 1:
            tempmax = 0
            tempindex = 0
            end = min(length,nums[this] + 1)
            if nums[this] >= length - 1:
                return suma + 1
            #自身不能达到队尾,找最大的那个,若包含若干个最大找最后的那个
            for i in range(this,end):
                #看有无跳板能直接跳到队尾的
                if nums[i] >= length - 1:
                    return suma + 2  
                #若无上述跳板,找最大 最后                                                                                                                       
                if nums[i] >= tempmax:
                    tempmax = nums[i] 
                    tempindex = i 
            this = tempindex
            print(this,nums[this])
            suma += 1
            if tempmax >= length-1:
               return suma + 1
        return suma
Publié 43 articles originaux · loué 14 · 20 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41545780/article/details/105363311
conseillé
Classement