lintcode-跳跃游戏II-117

这是一道关于跳跃游戏的问题,给定一个非负整数数组,每一步可以跳跃最大长度为当前位置的值。任务是找到从第一个位置到达最后一个位置所需的最小跳跃次数。例如,对于数组[2,3,1,1,4],最少跳跃次数是2。" 103648503,7616727,SQL Server 实践:多表联查操作解析,"['SQL server', '数据库查询', '数据库操作', '数据关联', 'SQL语法']
摘要由CSDN通过智能技术生成

给出一个非负整数数组,你最初定位在数组的第一个位置。

数组中的每个元素代表你在那个位置可以跳跃的最大长度。   

你的目标是使用最少的跳跃次数到达数组的最后一个位置。


样例

给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)

class Solution {
public:
   
    int jump(vector<int> A) {
        int n;
        if(0==(n=A.size()))
            return 0;
        int steps[n];    //记录到达该点时所需要的最小步数 [0...i...n]
        steps[0]=0;                   
       
        for (int i = 1; i<n; i++) {      //当到达下标为i的点时
            for (int j = 0; j<i; j++) { 
                if (j+A[j] >= i) {      //走到下标为j的点时若能跳跃到下标为i点
                    steps[i] = steps[j] + 1; //更新步数
                    break;                   //不必往后继续循环的原因是越靠近起点的点(j越接近0)
                }                            //必然步数越少,因为往后的步数更新都是基于前面的点
            }                                //这么想:不论怎样走,走到第5格需要的步数肯定少于走到第10格
        }
        
        return steps[n-1];
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值