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

本文针对JumpGame算法问题提供了一种有效的解决方案。通过分析数组中每个元素代表的最大跳跃长度,判断能否从起始位置达到数组末尾。文章详细阐述了算法思路,并提供了C++实现代码。

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

题目链接: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)提交结果:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值