您的位置:首页 > 其它

LEETCODE 55. Jump Game

2017-04-07 15:41 417 查看

LEETCODE 55. Jump Game

贪心算法

题目要求

给出一个非负整数数组,每个元素代表在当前位置能往前跳的最大步数,判断能否跳到这个数组的最后。

用一个例子理解:

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

元素23114
index01234
就是说在index=0的时候,最大步数是2,index可以+0,+1,+2;数组要跳到数组的最后只需要保证有一种跳转方案的步数和是大于等于数组长度。如果没有一种方案满足这个最低要求则无法跳到数组最后。

解题思路

每次迭代根据当前迭代的左界和右界,计算得到下一次迭代的右界,下一次的左界就是当前迭代的右界,只要计算得到右界是大于数组长度的就可以停止迭代,这时说明已经找到可以跳到数组最后的方案了,返回true;或者下一次迭代的右界并没有在当前迭代右界的右边,说明这时已经跳到了可以到达的最远处,而且小于数组长度,说明无法跳到数组最后,返回fase。

代码

class Solution {
public:
bool canJump(vector<int>& nums) {
int endInd = int(nums.size()), leftInd = 0, rightInd = 1;
while (rightInd < endInd) {
int newRightInd = rightInd;
for (int i = leftInd; i < rightInd; i++) {
//cout << i << endl;
if (i + nums[i] >= newRightInd) {
newRightInd = i + nums[i] + 1;
}
}
if (newRightInd <= rightInd) {
break;
}
leftInd = rightInd;
rightInd = newRightInd;
//cout << leftInd << " " << newRightInd << endl;
}
return rightInd >= endInd;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: