[LeetCode-Algorithms-55] "Jump Game" (2017.11.7-WEEK10)

题目链接:Jump Game


  • 题目描述:

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.


(1)思路:注意当前数字表示的是能跳的最大步数,也就是小于等于这个数字的地方都可以到达。先依次检查数字,如果不是0,就往前跳最大步数,看看是否可以超过数组末位;如果是0,就往回找,找到一个位置,当前位置序号加上它的数字可以超过刚才数字为0的位置。如果一直回退到了上一跳起点,那么就无法到达。还要注意[0, 1],即一开始就是0的特殊情况。
(2)代码:
class Solution {
public:
    bool canJump(vector<int>& nums) {
        int pos = 0;
        while(pos < nums.size() - 1) {
            if(nums[pos] > 0) pos += nums[pos];
            else {
                int i = pos - 1;
                for(i; i > 0; i--) {
                    if(i + nums[i] > pos) {
                        pos = nums[i] + i;
                        break;
                    }
                }
                if(i <= 0) return false;
            }
        }
        return true;
    }
};
(3)提交结果:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值