要求
代码
class Solution {
public:
bool canJump(vector<int>& nums) {
int max_jump = 0;
for (int i = 0; i < nums.size(); i++)
{
if (i <= max_jump )
{
max_jump = max(i + nums[i], max_jump);
if (max_jump >= nums.size() - 1)
{
return true;
}
}
}
return false;
}
};
最开始考虑到对数组中0前边的元素进行判断。如果0位置前边的元素都不可以绕过0,那么可以判断不能跳跃到最后,但是这种想法需要对类似于[3, 0, 0, 0]这样连续几个0的情况进行判断,因此比较繁琐。
题解中的贪心算法维护了最远可以到达的位置,遍历整个数组,只有当前位置加当前位置的跳跃步数大于最远到达位置时才更新这个值。