Leetcode55
1.问题描述
2.解决方案
重要思路:不用纠结跳几步,只要覆盖范围到了就一定可以跳过去!
整体思路没毛病了在实现上有点小问题就是:
1.class Solution1比class Solution多了如果是1直接返回
2.并且在记录range的时候如果大于等于nums.size()-1了直接返回而不是等到最后才判断
3.并且要注意i一定是要在range范围内的,如果不在其实就是直接return false了
if(nums.size()==1) return true;
//错误↓
//if(i<=range){
// int range=max(range,i+nums[i]);
// if(range>=nums.size()-1) return true;
//}
//正确↓
if(i>range) return false;
//int range=max(range,i+nums[i]);
range=max(range,i+nums[i]);
if(range>=nums.size()-1) return true;
class Solution {
public:
bool canJump(vector<int>& nums) {
int range=0;
//0 1 2 3 4
//2 3 1 1 4
for(int i=0;i<nums.size();i++){
if(i<=range){
int t=i+nums[i];
if(t>range) range=t;
}
}
if(range>=nums.size()-1) return true;
else return false;
}
};
class Solution1 {
public:
bool canJump(vector<int>& nums) {
if(nums.size()==1) return true;
int range=0;
//0 1 2 3 4
//2 3 1 1 4
for(int i=0;i<nums.size();i++){
//错误↓
//if(i<=range){
// int range=max(range,i+nums[i]);
// if(range>=nums.size()-1) return true;
//}
//正确↓
if(i>range) return false;
//int range=max(range,i+nums[i]);
range=max(range,i+nums[i]);
if(range>=nums.size()-1) return true;
}
return false;
}
};