贪心算法
- 每次求出当前位置的最远距离,看最后的最远距离能不能到最后
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size() < 2) return true;
int longest = nums[0];
for(int i = 0;i < nums.size();i++){
if(i <= longest){
longest = max(longest,nums[i]+i);
}
}
return longest > nums.size()-2;
}
};
通过时间:
第二种
- 因为只有一个数组中有0的时候才会到达不了最后一个
- 所以可以从后往前遍历,找到0时判断后面的位置可不可以跨越这个0,如果到最后跨越不了,那么就是false
class Solution {
public:
bool canJump(vector<int>& nums) {
if(nums.size() < 2) return true;
int longest = nums[0];
int dis = 1;
for(int i = nums.size()-2;i > -1;i--){
if(nums[i] > dis-1){//如果能越过0就重置
dis = 1;
}
else{//如果之后1个不能越过,那么再往后的要越过更多
dis++;
}
}
if(dis > 1) return false;
return true;
}
};
通过时间: