7、编写一个程序,给定一个整数列表 nums,其中 nums[i] 表示从当前位置可以跳到的最大距离,判断是否可以从位置 0 跳到最后一个位置。
时间: 2024-10-11 14:05:54 浏览: 16
为了编写这个程序,你可以采用动态规划(Dynamic Programming)的思想,特别是“到达每个位置”的回溯方法。以下是算法的步骤:
1. 初始化两个变量:`dp` 数组用于记录从每个位置 `i` 是否能够到达最后一个位置(`dp[i]` 表示从位置 `i` 到达终点)。初始值设为 `False`,因为从起始位置 0 直接到达终点是不可能的。
2. 遍历数组 `nums` 和 `dp` 数组,对于每个位置 `i`:
a. 如果当前值 `dp[j]` 为 `True`(即我们已经知道可以从 `j` 到达终点),并且 `i + nums[j] >= j`(表示从 `j` 跳到 `i` 后仍然可以到达终点),那么设置 `dp[i]` 为 `True`,因为我们找到了一条路径。
3. 最终检查 `dp[-1]`,如果为 `True`,说明可以从位置 0 跳到最后一个位置;否则,无法到达。
以下是一个 Python 示例:
```python
def canJump(nums):
n = len(nums)
dp = [False] * n
dp[0] = True
for i in range(n - 1):
for j in range(i, min(i + nums[i], n)):
dp[j] = dp[j] or dp[i]
return dp[-1]
# 测试
nums = [2, 3, 1, 1, 4]
print(canJump(nums)) # 输出:True (因为可以从位置0跳到位置3)
```
阅读全文