数组最小跳跃次数问题代码错误排查及思路纠正求助
数组最小跳跃次数问题代码错误排查及思路纠正求助
问题描述
给定一个包含N个整数的数组arr[],每个元素代表从该位置可以向前跳跃的最大长度。也就是说,如果arr[i] = x,那么我们可以跳跃任意距离y满足y ≤ x。
要求找到到达数组末尾的最小跳跃次数(从第一个元素开始)。如果某个元素是0,则无法通过该元素。注意:如果无法到达数组末尾,返回-1。
示例1
输入:
N = 11
arr[] = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9}输出:3
解释:
第一次从第1个元素跳到第2个元素(值为3)。接着从这里跳到第5个元素(值为9),最后从这里跳到数组末尾。
示例2
输入:
N = 6
arr = {1, 4, 3, 2, 6, 7}输出:2
解释:
先从第1个元素跳到第2个元素,然后直接跳到数组末尾。
我的代码
class Solution{ public: int minJumps(int arr[], int n){ // Your code here int jump=0; int count=0; for(int i=2;i<=n;i++){ if(arr[i]%i==0){ count++; if(arr[i]!=i){ count++; } } if(count==2){ jump++; } } return jump; } };
我的思路及疑惑
我误解了题目,以为要求跳到数组中的特定质数位置来统计跳跃次数。我的思路是这样的:
- 首先想找出质数,所以遍历数组时用了
for(int i=2;i<=n;i++)(这里n是数组的大小) - 如果
arr[i]%i==0,就进入if块,把count加1(count初始化为0) - 又检查如果
arr[i]!=i,就再把count加1,觉得这样能排除非质数的情况 - 如果count等于2,就判定这是质数,把jump加1(jump初始化为0)
- 最后返回jump,但144个测试用例一个都没通过😥
有没有人能帮我解释一下我的代码哪里错了?
备注:内容来源于stack exchange,提问作者Shrish Bhargav
相关产品推荐
相关产品推荐

