LetCode 55. 跳跃游戏

// 超时
// class Solution {
// public:
//     bool canJump(vector<int>& nums) {
//         if (nums.size() == 0)
//             return false;
//         return check(0, nums);
//     }
    
//     bool check(int start, vector<int>& nums){
//         if (start == nums.size() - 1)
//             return true;
//         if (nums[start] == 0)
//             return false;
//         for (int i = 1; i <= nums[start]; i++)
//             if (check(start + i, nums))
//                 return true;
//         return false;
//     }
// };
static int x=[](){
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    return 0;
}();
class Solution {
public:
    bool canJump(vector<int>& nums){
        int max_index = 0;
        for(int i = 0; i < nums.size(); i++){
            // i > max_index表示无法到达i的位置,失败
			// max_index >= (n - 1),此时的距离已经足够到达终点,成功
            if (max_index >= nums.size() - 1 || i > max_index)
                break;
            max_index = max(max_index, i + nums[i]);
        }
        return max_index >= nums.size() - 1;
    }
};

猜你喜欢

转载自blog.csdn.net/wbb1997/article/details/81000555