经典重庆网站,怎么做短剧推广赚钱,做新浪微博网站需要,宝坻集团网站建设本题和上一题还是有不一样的地方#xff0c;这个题中#xff0c;我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。
那么我们还是采用覆盖范围的概念#xff0c;但是我们需要两个#xff0c;一个是在当前位置的覆盖范围#xff0c;另一个是下一步的覆盖… 本题和上一题还是有不一样的地方这个题中我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。
那么我们还是采用覆盖范围的概念但是我们需要两个一个是在当前位置的覆盖范围另一个是下一步的覆盖范围。
当我们位于当前位置我们计算我们可以走到的最大覆盖范围如果最大覆盖范围大于等于nums.length-1也就是说我们在当前位置再走一步就可以到达数组的终点那么此时直接步数加一然后跳出循环即可。
如果我们当前位置发现最大覆盖范围没有到达重点那么我们应该继续往下走往下走的时候我们就需要计算下一步无论是往后走几步我们要找到下一步走完之后的最大覆盖范围然后把这个值给当前的覆盖范围然后步数加一这样就说明我们在步数加一的情况下我们可以走到的最远距离
本题和上一题不一样的点在于上一个题我们只需要找最大的覆盖范围即可所以我遍历的时候是在覆盖范围内遍历这个题是要找最小的步数我们需要数组中每个元素都遍历然后根据当前元素的值去改变最大覆盖范围如果超过了数组的索引最大值那么说明再走一步肯定能到最后注意可能不是从当前位置走的可能是当前位置前一个位置因为我们不关心走的路线只关心最大范围。如果当前的最大范围和数组下标i相等了说明我们当前走到的位置还到不了数组最后终点还需要再往后走然后我们往后走那么最大覆盖范围肯定变化了就把这个最大覆盖范围给当前覆盖范围继续用i和当前覆盖范围比较
class Solution {public int jump(int[] nums) {if (nums null || nums.length 0 || nums.length 1) {return 0;}//记录跳跃的次数int count0;//当前的覆盖最大区域int curDistance 0;//最大的覆盖区域int maxDistance 0;for (int i 0; i nums.length; i) {//在可覆盖区域内更新最大的覆盖区域maxDistance Math.max(maxDistance,inums[i]);//说明当前一步再跳一步就到达了末尾if (maxDistancenums.length-1){count;break;}//走到当前覆盖的最大区域时更新下一步可达的最大区域if (icurDistance){curDistance maxDistance;count;}}return count;}
}