给定一个长度为n的0 索引整数数组nums。初始位置在下标 0。每个元素nums[i]表示从索引i向后跳转的最大长度。换句话说如果你在索引i处你可以跳转到任意(i j)处0 j nums[i]且i j n返回到达n - 1的最小跳跃次数。测试用例保证可以到达n - 1。示例 1:输入:nums [2,3,1,1,4]输出:2解释:跳到最后一个位置的最小跳跃数是2。 从下标为 0 跳到下标为 1 的位置跳1步然后跳3步到达数组的最后一个位置。示例 2:输入:nums [2,3,0,1,4]输出:2int max(int a ,int b){ return ab?a:b; } int jump(int* nums, int numsSize) { int res 0; int cur_arrival 0; int max_arrival 0; for(int i 0;inumsSize-2;i){ //先计算新一轮可以到达的最远距离 max_arrival max(max_arrival,inums[i]); //如果当前已经到达最远举例了比如2 3 0 1 4已经到达i2 也就是0的位置无法向前了 //就更新当前最远距离为新一轮计算出来的max_arrival //如果没到达最远的距离就继续遍历更新维护一个最大的距离,如到达i1位置处又计算出了一个新的maxarrival 4 if(cur_arrival i){ cur_arrival max_arrival; res;//算跳了一步 } } return res; }注意把i看作人cur_right看作已经建好的的桥next_right看作能够建成的最远的桥人还没走到已经建好的桥的尽头时收集最远能建到多远当走到尽头时再建一段新桥cur_right next_right人再去追赶桥的尽头。至于为什么走到头才跳是对的请参考Sarinee的评论我觉得挺通俗易懂的。来自评论区