求解数组最小跳跃次数问题时,我的思维逻辑存在哪些错误?
求解到达数组末尾的最小跳跃次数
问题背景
给定一个数组,计算从数组起始位置到达末尾所需的最小跳跃次数。
解题思路
- 从数组起始位置开始遍历,循环持续的条件是当前位置
i的覆盖范围i + arr[i]尚未触及数组末尾 - 在每次循环内,遍历当前元素能覆盖的所有后续位置,找出其中值最大的元素对应的索引
- 将当前位置
i更新为这个最大值的索引,同时跳跃次数加1 - 若遇到当前元素值为0且无法到达末尾的情况,直接返回-1
代码实现
public static int minJumps(int[] arr){ // your code here if(arr.length==1){ return -1; } int jumps=1; int maxIndex=0; int i=0; while(i+arr[i]<arr.length-1){ if(arr[i]==0){ return -1; } int max=0; for(int j=i+1;j<=arr[i]+i;j++){ if(arr[j]>=max){ max=arr[j]; maxIndex=j; } } i=maxIndex; jumps++; } return jumps; }
内容的提问来源于stack exchange,提问作者Gargouri Nourallah
相关产品推荐
相关产品推荐

