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.
Example 1:
Input: [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:
Input: [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum
jump length is 0, which makes it impossible to reach the last index.
题意:一个数组存储了非负整型数据,数组中的第i个元素nums[i],代表了可以从数组第i个位置最多向前跳跃nums[i]步。已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置。
分析:从第i个位置,最远可跳 i + nums[i] 的位置。用数组index记录每一个位置最远可跳到的位置。如果从第0个位置最远可以跳至第i个位置,则从第0位置也一定可以跳至1,2......i-1, i 的位置。到底选择哪一个呢?应该选择其中可以跳到最远的那一个(贪心)。
class Solution {
public:
bool canJump(vector<int>& nums) {
vector<int> index;
int max_index = 0;
for (int i = 0; i < nums.size(); i++)
{
index.push_back(i+nums[i]);
}
int pos = 0;
while (pos <= max_index && pos < nums.size())
{
if (index[pos] > max_index)
max_index = index[pos];
pos++;
}
return pos >= nums.size();
}
};