題目描述
給你一個非負整數數組 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;}
};