解法都在代码里,不懂就留言或者私信
class Solution {
public boolean canJump(int[] nums) {
/**如果就一个位置,你本来就在这,肯定可以跳到*/
if(nums.length == 1) {
return true;
}
/**这个题的解题思路是遍历数组,如果当前位置不在之前最大可以跳到的范围内,那这一步直接就到不了,返回false
否则试试当前位置+它的值能不能把最大可以跳到的位置变得更远,如果走到最后一个位置得时候这个位置还是最大可以跳到得范围内,那就是可以跳到*/
/**现在就在0位置,即使不跳也能到0位置,所以max设置为0*/
int max = 0;
for(int i = 0; i < nums.length; i++) {
/**之前跳得最大范围都到不了i,返回false */
if(i > max) {
return false;
}
/**如果能跳到看看i位置+它能跳得最大距离能不能把max变大 */
max = Math.max(max, i + nums[i]);
}
/**遍历完数组都还没有返回,说明所有位置都能跳到,返回true */
return true;
}
}
常数时间或者遍历啥的实在不想优化了,就这样吧