45.leetcode題目講解(Python): 跳躍遊戲 II(Jump Game II)


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版 持續更新)

我的博客裏還有其他好東西: 苔原帶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章