[leetcode]045-Jump Game II[贪心算法]

本文详细解析了LeetCode上的跳过游戏II问题,通过贪心算法求解最小步数到达终点的策略。文章介绍了算法的基本思路,即在每次遍历中更新能够到达的最远距离,并附上了C++实现的源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 原题

https://leetcode.com/problems/jump-game-ii/

2. 思路

题意:求出最小步数,使其到达最远距离。

显然,这可以利用贪心算法,局部最优得出全局最优。

在每次遍历中,基于当前位置能够到达的最远距离,判断在该范围内,下次能到达的最远距离,

更新该距离即可。

3. 源码

class Solution {
public:
    int jump(vector<int>& nums) {
        int index = 0, step = 0;
        while(index < nums.size()-1)
        {
            int range = nums[index]; //** the range it can jump to;
            int min_id, minv = 0; //*** each iteration, current target index and range
            for (int i = 1; i <= range; i++)
            {
                if (index+i >= nums.size()-1)
                    return step+1; //*** reach the end, return
                if (nums[index+i] >= minv) //** update target
                {
                    minv = nums[index+i];
                    min_id = index+i;
                }
                minv--; //*** decrease to compare with next range
            }
            index = min_id;
            step++;
        }
        return step;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值