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.

题目意思是说给定一个数组,A[i]表示从第i个点可以跳到的最远距离,比如说i = 0,A[i] = 3表示 从i点最远可以到i = 3这个点。要求给定一个数组,判断是否能从第一个点跳到最后一个点。算法思路是这样的:用一个变量记录当前能跳到的最远距离(distance),从第一个点开始循环判断并且更新最远距离, 这个距离等于当前获得的最远距离与现在所处位置所能到达的最远距离中较大的那个。  有两种情况下可以断定无法到达:1,循环到了倒数第二个元素发现最远距离还是小于最后一个元素的位置。2,遇到了一个元素值为0并且最远距离正好只能到这个元素。.


class Solution {
public:
	bool canJump(int A[], int n) {
		// Note: The Solution object is instantiated only once and is reused by each test case.
		if (n == 0) return false;
		if (n == 1) return true;
		int longestPos = 0;
		for (int i = 0; i < n - 1; ++i)
		{
			if (A[i] == 0 && longestPos == i) break;
			longestPos = longestPos > A[i] + i ? longestPos : A[i] + i;
			if (longestPos >= n - 1)
				return true;
		}
		return false;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值