【代码随想录day 28】 力扣 45.跳跃游戏 II
视频讲解:https://www.bilibili.com/video/BV1Y24y1r7XZ/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html#%E6%80%9D%E8%B7%AF
力扣题目:https://leetcode.cn/problems/jump-game-ii/
这道题有点难想到,把他想象成一个阶梯,在这个阶梯上找最大能爬的下一个台阶,每爬一次台阶,ans就+1,最后一旦发现当前台阶能够到达终点后,直接跳出循环,返回ans。
class Solution {
public:int jump(vector<int>& nums) {//剪枝if(nums.size() == 1) return 0;//初始化当前能够覆盖的最大范围,下一阶段最远能覆盖到哪nextDistanceint curDistance = 0;int nextDistance = 0;int ans = 0;//for循环开始遍历节点for(int i = 0; i < nums.size() - 1; i++){//不断更新下一个阶段最远能覆盖到哪里nextDistance = max(nums[i] + i, nextDistance);//如果i遍历到了当前覆盖的最末端,开启下一阶段覆盖if(i == curDistance){//进入下一阶段,当前覆盖最大值就变成了下一阶段的覆盖最大值curDistance = nextDistance;ans++;if(nextDistance >= nums.size() - 1){break;}}}return ans;}
};