この質問の難しさがなぜ「難しい」のか分かりません
タイトルは、リストを指定すると、[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