题目描述
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false
题目分析
题目中描述,数组中每个元素代表其能跳跃的最大长度,因此可以使用贪心算法来解决该问题:
- 先构造一个表示能跳跃到的最大位置max_jump值,初始值为0;
- 在遍历数组时:
若当前值的下标小于等于max_jump,表示能够从前面的某个元素跳跃到当前位置,接下来比较当前元素值+当前元素位置是否大于max_jump,若大于则更新max_jump,否则,不更新max_jump;
若当前值的下标大于max_jump,表示不能从前面的所有元素跳跃到当前位置,结束遍历,返回false
- 如果可以一直跳到最后,返回true
Code
class Solution {
public:bool canJump(vector<int>& nums) {int max_jump = 0;for (int i = 0; i < nums.size(); ++i) {if (i <= max_jump) {max_jump = max(max_jump, i + nums[i]);} else {return false;}}return true;}
};