https://leetcode.com/problems/jump-game-ii/
给定一个数组nums,数组内部都是正整数,每走到数组的index,则表明可以继续往后最大走nums[i]步,求最少需要走过多少个index则能走到最后
示例:[2,3,1,1,4]
答:2
解析:从2走到3,从3走到4,一共经过了两个index
- 解析
两个指针,pre代表上一次能够达到的最远距离,cur表明当前能达到的最远距离,所以当cur< nums.length -1的时候,表明此时还没达到最后一个index,需要继续循环。结果用一个变量res来标明,因为本题只用算从最开始到最后需要走多少步,随意每循环,res就对应+1
input:[2,3,1,1,4]
- res = 1; pre = 0; cur = 2,i=0
2.res=2;pre=2;cur=5;i=2
return 2
public int jump(int[] nums) {
int pre = 0;//上一次循环达到的最远距离
int cur = 0;//本次计算达到的最远距离
int len = nums.length;
int res = 0;//结果int,表明需要做多少步
int i = 0;//用来循环的游标
while (cur < len - 1) {//只要cur没有达到最后一个index,则继续循环
res++;//每次循环,表明多走了一步,需要将res加一
pre = cur;//更新上次走到的距离
for (; i <= pre; i++) {//因为每次pre都会更新,即会往后走,所以在上次走到的游标i为基准,重新算走到的更远距离
cur = Math.max(cur, i + nums[i]);
}
}
return res;
}
网友评论