📅  最后修改于: 2023-12-03 14:58:36.666000             🧑  作者: Mango
有一个数组,其中每个元素都表示该位置能跳跃的最大长度。请确定您是否能够到达最后一个索引。
例如,给定以下数组:
[2,3,1,1,4]
我们依次到达:
显然,我们可以到达最后一个索引。
本题可以使用贪心算法来解决。
维护一个变量 maxReach
,表示当前可以到达的最远位置,初始值为0。
遍历数组,对于当前的元素 i,它能够到达的最远位置是 i + nums[i]。
如果当前位置i能够到达的最远位置大于 maxReach
,则更新 maxReach
。
如果 maxReach
大于等于数组的最后一个索引,则可以到达最后一个位置,返回true;否则返回false。
bool canJump(vector<int>& nums) {
int n = nums.size();
int maxReach = 0;
for (int i = 0; i < n; i++) {
// 当前能到达的最远位置
int reach = i + nums[i];
// 更新 maxReach
if (reach > maxReach) {
maxReach = reach;
}
// 如果 maxReach 大于等于数组的最后一个索引,返回 true
if (maxReach >= n - 1) {
return true;
}
// 如果到了不能跳的位置,返回 false
if (i == maxReach) {
return false;
}
}
return false;
}
以上代码使用了C++语言。