题解 | #跳跃游戏(一)# Python3

跳跃游戏(一)

https://www.nowcoder.com/practice/07484f4377344d3590045a095910992b

import sys


# 方法一: O(NN),超时
# dp[i] = 能否跳到i
# dp[i] = (j从0~i-1, dp[j]==1 & nums[j]>= (i-j))

n = int(input())
nums = list(map(int, input().strip().split()))

# dp = [False] * (n)
# dp[0] = True



# for i in range(1,n):
#     for j in range(i):
#         if dp[j] and nums[j] >= (i-j):
#             dp[i] = True
#             break

# print('true' if dp[-1] else 'false')

# 方法二, dp[i]为在i还能跳往后到达多少格,
# 如何dp[i]==0,说明无法再向后跳了
# dp[i] = max(dp[i-1]-1,nums[i])
# dp[i]
dp = [0] * (n+1)
flag = True
for i in range(1,n+1):
    dp[i] = max(dp[i-1]-1, nums[i-1])
    if dp[i] == 0 and i!=n: # 最后一个不需要往后跳,已经到达
        flag = False
        break
print('true' if flag else 'false')

# 方法三,注意,如果能到达i,一定能到达i-1
# 因此,可以采用贪心策略,从后往前遍历数组,迭代看当前位置+值能否到达目的位置,可以的话,只需要到达当前位置
# 就可以到达最后的目的位置

全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务