leetcode Jump Game II 題解

逆推,從後往前開始。

每一次,都是尋找能到達本元素,同時與本元素距離最遠的元素的位置。但是以下程序超時,各位朋友看一下,如何優化以下。

class Solution:
    # @param {integer[]} nums
    # @return {integer}
    def jump(self, nums):
        step = 0
        self.step_ele = len(nums) - 1
        self.num = copy.deepcopy(nums)
        while self.step_ele > 0:
            location = self.max_step(self.step_ele)
            if location == -1:
                return 0
            self.step_ele = location
            step += 1
       
        return step
           
    def max_step(self, location):
        for i in range(location):
            if i + self.num[i] >= location:
                self.step_ele = i
                return self.step_ele
        return -1

正推法:從頭開始尋找每一次遍歷能達到的最遠距離。

代碼:

class Solution:
    # @param {integer[]} nums
    # @return {integer}
    def jump(self, nums):
        step = 0
        left = 0
        right = 0
        if len(nums) == 1:
            return 0
        while left <= right:
            step += 1
            last_right = right
            for i in range(left, right+1):
                new_right = i + nums[i]
                if new_right >= len(nums) - 1:
                    return step
                if new_right > right:
                    right = new_right
            left = last_right + 1
       
        return 0

 

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