题述:
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
思路:阅读题目我们可以发现只要数组里面没有0 我们就一定可以到达最后一下标。因此我们可以通过判断数组里面是否有0这个数字并结合是否可以越过0这个数字来判断是否能到达最后一个下标。但我这里要说的是一种更加简洁的办法。
我们记录在一个下标处最远能到达的位置,并且我们在每个下标往下一个下标跳的时候都尽量跳最远的距离,与此同时我们不断比较现在这个下标最远可以到达的位置是否超过或者恰好可以到达最后一个下标,如果可以返回true否则返回false。
题解:
#define newmax max<i+nums[i]?i+nums[i]:max
bool canJump(int* nums, int numsSize){
int max=0;
for(int i=0;i<numsSize;i++){
if(max<i){
return false;
}
max=newmax;
}
return true;
}
其中i+nums[i]即为当前下标最远可以到达的位置
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)