欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 力扣HOT100之贪心算法:45. 跳跃游戏 II

力扣HOT100之贪心算法:45. 跳跃游戏 II

2025/11/13 3:33:26 来源:https://blog.csdn.net/weixin_52151595/article/details/148590648  浏览:    关键词:力扣HOT100之贪心算法:45. 跳跃游戏 II


这道题刷代码随想录的时候也刷过,本来以为有了上一题55.跳跃游戏的基础,这道题会好做一点,但是依旧想不出来思路,回去看了下自己当时写的博客,没想到今天的感受和当时的感受都一模一样。。。What can I say?看了下代码随想录的视频和灵神的题解,终于把这个问题彻底弄清楚了。
由于这道题保证一定能跳到终点,所以我们只需要考虑如何花最少的次数跳到终点,这里我们定义resultcurrentnext三个变量,result用于记录最小跳跃次数,current代表本次跳跃后所能达到的覆盖范围的最远边界,next代表下一次跳跃所能达到的最远覆盖范围,然后用一个for循环来遍历nums的元素,当我们遍历到current处,则说明我们已经达到了当前覆盖范围的边界,我们需要先判断是否已经到达数组的边界,如果还没到达,则当前是已经到达覆盖范围边界但是尚未达到数组的边界。我们必须跳跃一次,并将current移动到下一次跳跃后的覆盖范围的边界,即current = next;result++;;当进入下一轮for循环时,则i进入下次跳跃的覆盖范围,我们再不断地更新下下次跳跃的最远覆盖范围,即next = max(next, i + nums[i]);。如果i已经到达了数组边界,则无需进行下一次跳跃,直接退出循环即可。

class Solution {
public:int jump(vector<int>& nums) {int current = 0;  //记录当前所在的位置int result = 0;   //记录最小次数int next = 0;for(int i = 0; i < nums.size(); i++){next = max(next, i + nums[i]);   //更新最大覆盖范围if(i == current){  //已经到达覆盖范围边界,需要进行一次跳跃,直接跳到下一个最大覆盖范围的边界if(i != nums.size() - 1){  //已经到达覆盖范围边界但是尚未达到数组的边界result++;current = next;}}}return result;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词