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
.
题目大意
给定一个数组,数组中的每个元素表示当前位置能前进的最大步数,最开始时从数组第一个位置起步,判断能否到达最后一个位置。
解题思路
使用贪心的方法寻找右边界,认为凡是位于右边界左边的位置都是可访问的。
每次通过比较当前位置所能达到的最远位置和当前的右边界,来选出新的右边界。
在当前位置大于右边界时,结束寻找右边界。
最后,比较右边界和终点,得出结果。
细节:
最后右边界需要加一,因为终点的值dst
是从1开始计数的。
算法复杂度
O(n)
代码实现
class Solution {
public:
bool canJump(vector<int>& nums) {
int dst = nums.size();
int rightBound = 0;
for (int i = 0; i < dst; i++) {
if (i > rightBound) { break; }
rightBound = max(i+nums[i], rightBound);
}
return rightBound+1 >= dst;
}
};