您的位置:首页 > 编程语言 > Python开发

leetcode Jump Game II 题解

2015-06-08 21:57 681 查看
逆推,从后往前开始。

每一次,都是寻找能到达本元素,同时与本元素距离最远的元素的位置。但是以下程序超时,各位朋友看一下,如何优化以下。

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法 python