题目:
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
.
题解:
这道题就是可以用贪心算法解答,其主要可以有几种情况可以明显判断出True or False.
(1)当数据长度小于2时,显然是True;
(2)如果到达的点值大于剩下的距离,则True;
(3)如果到达的点值为0,但不是最后一个点,则False;
可以根据(2)(3)两点,对每次jump后的点进行判断是否成功。
具体代码如下:
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size() < 2) return true;
int position = 0;
int n = nums[position];
while(1){
if(n >= nums.size() - position - 1)
return true;
if(n == 0 && position != nums.size()-1)
return false;
int max = 0;
int pos = 0;
for(int i = 1; i <= n; i++)
if(nums[position+i]-(n-i) >= max) {
max = nums[position+i] - (n-i);
pos = position + i;
}
position = pos;
n = nums[position];
}
}
};
end!