这道题有一个性质,只要发现就会变得简单
我们能跳到的位置,一定是连续的一段
如图所示,我们较后面的一个点是由前面一个点跳过来的,如果他能跳到较后的点,那么它少跳一点也能跳到前面的一个点,所以我们能跳的点,一定是连续的一段
接下来我们来判断我们怎样才到不了终点,那么肯定实在中间某个点停下来了,现在把这个点叫做i,那么前面i-1个点跳的最远距离,一定小于i点所在的位置。ok现在就可以做了
知识点:
判断在更新前表示是前i-1个数;
判断在更新后表示是第i个数。
步骤:
1.j表示前i-1个数能跳的最右边的距离
2.遍历整个数组如果j《i就表示到达不了终点
注意:这里一定要先判断j<i是否成立,如果更新j再i的前面就表示为,再第i个数能跳的最远距离
class Solution {
public:
bool canJump(vector<int>& nums) {
for(int i=0,j=0;i<nums.size();i++){
if(j<i)return false;
j=max(j,i+nums[i]);
}
return true;
}
};
版权声明:本文为m0_62000951原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。