逆推,从后往前开始。
每一次,都是寻找能到达本元素,同时与本元素距离最远的元素的位置。但是以下程序超时,各位朋友看一下,如何优化以下。
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