如果给定的数据长度较小,可以采用动态规划,设置 dp, dp[i] 表示 是否可以调到该位置; 状态转移方程为 dp[i] = dp[j] and data[j] + j >= i j < i,由于数据的长度较大,双重循环遍历会超时,采用贪心策略,从后向前遍历数组,看当前位置 + 值 是否 >= 给定的位置,最终判断是否为 0
import sys
n = int(sys.stdin.readline().strip())
data = list(map(int, sys.stdin.readline().strip().split()))
start = n - 1
for i in range(n - 1, -1, -1):
if i + data[i] >= start:
start = i
# 此处可对 i 进行判断是否为 0 跳出循环
if start == 0:
print("true")
else:
print("false")