题意:

错误解答:

思路是对的 但是写的不好
思路:
当前位置为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;
}
}
这篇博客讨论了一个关于数组处理的问题,具体是跳躍遊戲的解决方案。博主首先介绍了错误的解答,指出其问题在于代码表述不清晰。然后,博主提供了一个正确的解答,详细解释了算法思路:从当前位置开始,在可达范围内寻找最大值并更新结束位置。这个过程不断迭代,直到达到数组末尾。算法的关键在于动态更新起始和结束位置,以找到最小步数。
2933

被折叠的 条评论
为什么被折叠?



