我导好好啊!!!刚找完他!充满动力,给个大标题!
55. 跳跃游戏
1、感觉不像是一道很明显的动态规划问题。
2、看下答案和自己的思路是否一致。和我的想法一下,敲代码叭!
3、通过了,但这次好慢呀
class Solution:
def canJump(self, nums: List[int]) -> bool:
n = len(nums)
dp =[True]+[False]*(n-1)
farmost = nums[0]
for i in range(n):
if dp[i]==True:
farmost = nums[i]
for j in range(i+1,i+nums[i]+1):
if i+nums[i]+1>n-1:
return True
dp[j] = True
return dp[n-1]
4、还是标答简单,最远能到达的地方用了动态规划。标答也遍历了o(n),不过只记录了最远能到达的位置,没有用dp更新值,少用了o(n)的空间以及部分的循环。
def canJump(self, nums: List[int]) -> bool:
farmost = 0
for x in range(len(nums)):
if x<=farmost:
farmost = max(farmost,x+nums[x])
if farmost>=len(nums)-1:
return True
return False
45. 跳跃游戏 II
1、最少次数,有点动态规划的味道了。
2、大概有思路了,感觉需要2个o(n)才可以。看下答案。思路不一样,答案思路更简单,但这和动态规划有啥关系?先敲一下代码~思路比较清晰,但不知道怎么用代码表示了哭哭
3、自己写代码还是有点费劲,加入start和end作为开始和结束遍历的点就轻松一点了。
def jump(self, nums: List[int]) -> int:
end=0
start=0
farmost = 0
step = 0
for i in range(len(nums)):
if farmost>=len(nums)-1:
return step
else:
step+=1
farmost = max([x+nums[x] for x in range(start,end+1)])
start = end+1
end = farmost