题解 | #几步可以从头跳到尾#

几步可以从头跳到尾

http://www.nowcoder.com/practice/de62bcee9f9a4881ac80cce6da42b135

[2, 3, 1, 1, 4, 2, 1]为例
第一次:
2可以跳到[3, 1],最远下标为2,那么第二次起跳肯定在这两个数内;
[3, 1]都可以作为第二次起跳点,所以可以跳到[1, 4],最远下标为4,那么第三次起跳肯定在[1, 4]这两个数内;
[1,4]都可以作为第三次起跳点,所以可以调到[2, 1],最远下标为6,已经到终点了;
时间复杂度:
空间复杂度:

class Solution {
public:
    int Jump(int n, vector<int>& A) {
        // write code here
        int ans = 0;
        int maxDst = 0; //当前最大到达位置
        int preJump = 0; //上次最大到达位置
        for(int i = 0; i < n - 1; i ++){
            maxDst = max(maxDst, i + A[i]);
            if(i == preJump){
                preJump = maxDst;
                ans ++;
            }
        }
        return ans;
    }
};
全部评论

相关推荐

头像
03-25 16:22
南华大学 Java
点赞 评论 收藏
分享
牛客245670684号:虚拟货币预测正确率百分之99,还要找工作干嘛,不早就财富自由了
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务