Leetcodeブラッシングレコード-45。ジャンプゲームII

ここに画像の説明を挿入

この質問の難しさがなぜ「難しい」のか分かりません

タイトルは、リストを指定すると、[0]の位置から開始して、一度に[0]までジャンプできることを意味します。
チームの終わりに到達するための戦略と最小ジャンプ数(チームの終わりに到達する必要がある場合)を選択します

私たちの戦略:
最初に入力配列nums [i]の各要素にiを追加して、新しい配列を取得します。これは、各位置から離陸することを意味し
ます。これから、numsで最も遠い位置を記憶できます。の意味が変更され、入力配列ではなくなりました
。nums[0]から開始してカウンターを定義します
。nums[i]からチームの最後に直接ジャンプできるかどうかを最初に確認するたびに、可能な場合はsum + 1を直接返します。
そうでない場合は、ジャンプできる最も遠い範囲の数値を見ると、どれが最大ですか?
(これは、最後までのジャンプの最小数を考慮する必要があるためです。その後、ジャンプ後のチームの終わりに近い中央の踏み台を選択する必要があります。)
複数の等しい最大値があると仮定して、ここで特別なケースがあり、後ろの最大値は踏み台です。
次に、この踏み台にジャンプして、次のジャンプを開始します

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
43件の元の記事を公開 14 件を賞賛・2 万回以上の閲覧

おすすめ

転載: blog.csdn.net/weixin_41545780/article/details/105363311