# Jump Game

By
blackntt

Asked In: Amazon, Ebay

# Problem:

Cho một mảng nguyên không âm, bạn bắt đầu ở vị trí đầu mảng. Cần tìm xem có cách đến cuối mảng không. Biết rằng giá trị ở vị trí hiện tại cho biết số lượng step tối đa có thể đi.

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.

# Solution

Độ phức tạp thời gian: O(n)
Độ phức tạp không gian: O(1)

  bool canJump(vector<int >& nums) {
        int zero = -1;
        for(int i=nums.size()-2;i>=0;i--){
            if(nums[i]==0&&zero==-1)
                zero = i;
            else{
                if(zero != -1){
                    if(nums[i]>=(zero-i)+1){
                        zero = -1;
                    }
                }
            }
        }
        return zero==-1;
    }