LeetCode 55. 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.

class Solution {
public:
    bool canJump(vector<int>& nums) {
        
    }
};

数组中的元素为非负整数,初始下标在第一个位置,每个元素代表你所能跳跃的最大距离,求能否到达最后一个元素?

思路如下:从下标元素i开始,用max=i+nums[i]表示在该下标下能跳跃的最大距离,如果在距离范围内,有其它的元素的距离大于等于最大距离,即j属于i~i+nums[i],且j+nums[j]>max,则更新max=j+nums[j],下标更新为j,此时表示我们跳跃到了下标为j的位置。

当下标达到或者超出了数组的最后一个位置,则返回true,否则,如果下标对应的值为0的话,返回false,代码实现如下:

class Solution {
public:
    bool canJump(vector<int>& nums) {
    	int max=0;
    	int index=0;
    	for(unsigned int i=0;i<nums.size();){
    		if(i==nums.size()-1)
    			return true;
    		if(nums[i]==0)
    			return false;
    		max=i+nums[i];
    		for(int j=i+1;j<=i+nums[i];++j){
    			if(j+nums[j]>=max){
    				max=j+nums[j];
    				index = j;
    			}
    		}
    		i=index;
    	}
    	return true;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值