题目如下所示:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
class Solution {
public:
bool canJump(vector<int>& nums) {
}
};
数组中的元素为非负整数,初始下标在第一个位置,每个元素代表你所能跳跃的最大距离,求能否到达最后一个元素?
思路如下:从下标元素i开始,用max=i+nums[i]表示在该下标下能跳跃的最大距离,如果在距离范围内,有其它的元素的距离大于等于最大距离,即j属于i~i+nums[i],且j+nums[j]>max,则更新max=j+nums[j],下标更新为j,此时表示我们跳跃到了下标为j的位置。
当下标达到或者超出了数组的最后一个位置,则返回true,否则,如果下标对应的值为0的话,返回false,代码实现如下:
class Solution {
public:
bool canJump(vector<int>& nums) {
int max=0;
int index=0;
for(unsigned int i=0;i<nums.size();){
if(i==nums.size()-1)
return true;
if(nums[i]==0)
return false;
max=i+nums[i];
for(int j=i+1;j<=i+nums[i];++j){
if(j+nums[j]>=max){
max=j+nums[j];
index = j;
}
}
i=index;
}
return true;
}
};