题意:
错误解答:
思路是对的 但是写的不好
思路:
当前位置为local 值为v
那么我们需要在 ( local+v ] 区间内 寻找一个能走的最大值 max= nums[i]+i
下次循环的时候 需要更新 start 和 end ,本次的start 为上一次end的后面一个, 本次的end 为上次的max
正确解答:
class Solution {
public int jump(int[] nums) {
int count=0;
int start=0;
int end=0;
int max=0;
//思路:当前位置 为local 值为V 能到的范围为:(local————local+V]
//在范围之内 求 nums[i]+i 的最大值
//找到之后 更新 end 为max
//更新start 为 end+1
while(end<nums.length-1){//不用到最后一步 因为到了最后一步 已经可以了
//max=end;//更新当前最远距离
for(int i=start;i<=end;i++){
if( (nums[i]+i) >=max ){
max=(nums[i]+i);
}
}
start=end+1;//start 每次从当前位置的下一点开始
end=max;//更新能到达的最远距离
count++;
}
return count;
}
}