刚开始像这道题,想的是这么从当前可以走的那几步中选择一步,所以一坨屎一样的代码
class Solution {
public:
bool canJump(vector<int>& nums) {
int n=nums.size();
int step=0;
int u=0;
int u_max=0;
int step_size=0;
int max_size=0;
int loci=0;
while(step<n-1){
step_size=nums[step];
max_size=step+step_size;
if(max_size>=n-1){
step=max_size;
break;
}
for(int i=1;i<=step_size;i++){
u=step+i+nums[step+i];
if(u_max<u){
u_max=u;
loci=step+i;
}
}
if(u_max>max_size){
step=loci;
}else{
break;
}
}
return step>=n-1;
}
};
虽然能通过,但是有了“选择”,那就根本算不上贪心。重新整体思路,变为我当前可以走多少路,我现在在哪
class Solution {
public:
bool canJump(vector<int>& nums) {
int k = 0;
for (int i = 0; i < nums.size(); i++) {
if (i > k) return false;
k = max(k, i + nums[i]);
}
return true;
}
};
i代表人,k代表当前可以走到哪。简洁了许多