Jump Game II - LeetCode
我們可以認爲“ nums”中每個項目的數字代表一個覆蓋區域。 因此,爲了解決這個問題,我們希望用最少的區域覆蓋整個範圍。值得注意的是,這我們雖然把這種算法稱爲貪婪算法,一般而言,貪婪算法找出的不是最優解。但是,在這道題目中,覆蓋最遠的下個區域是相比其他區域而言是佔優策略Strategic dominance, 所以,在這道題目中,我們是可以通過貪婪得到最優解的。
算法的思路如下:
1.根據當前位置及其區域,找到範圍從i
到(i + num)
的相鄰區域。
2.將這些區域的最遠覆蓋範圍與最大範圍進行比較:如果(i + num)
大於最大範圍,則設置下一個覆蓋範圍從r
開始,最大範圍等於i + num
。
3.將當前位置更新爲r
。
4.繼續這樣做,直到覆蓋整個區域。
class Solution:
def jump(self, nums) -> int:
if not nums or len(nums) == 1:
return 0
des = len(nums) - 1
res = 0
i = 0
max_range = 0
nxt = 0
while i < des:
if i + nums[i] >= des:
return res + 1
for r in range(i + 1, i + nums[i] + 1):
if r + nums[r] > max_range:
max_range = r + nums[r]
nxt = r
i = nxt
res += 1
如何刷題 : Leetcode 題目的正確打開方式
我的GitHub : Jedi-XL
其他題目答案:leetcode題目答案講解彙總(Python版 持續更新)
我的博客裏還有其他好東西: 苔原帶