一.相关链接
题目链接:45.跳跃游戏 II
二.心得体会
这道题相对于跳跃游戏的区别在于还要用最小的步数来达到终点。这道题的核心是不能一直更新最大覆盖范围,我们要在遍历完一整个原先的覆盖范围之后选择出其中的最大的来更新(其实就是选择到了最优的跳跃节点)。
三.代码
class Solution {
public:int jump(vector<int>& nums) {if(nums.size()==1) return 0;int jumpStep = 0;int maxStep = 0;int index = 0;int ans = 0;for(int i=index;i<=jumpStep;i++) { int curStep = i + nums[i];if(curStep>maxStep) maxStep = curStep;if(i == jumpStep) { //每一次更新最大覆盖范围要在遍历完原覆盖范围之后ans += 1;index = jumpStep; //更新下一轮遍历的起点jumpStep = maxStep; //更新最大遍历范围if(jumpStep>=nums.size()-1) return ans; //如果最大的遍历范围到达终点则返回}}return ans;}
};