class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n=nums.size();
        int start=0;
        int end=0;
        int maxend=0;
        while(end<n-1){
            for(int i=start; i<=end; ++i){
                if(i+nums[i]>=n-1) 
                    return true;
                maxend=max(maxend, i+nums[i]);
            }
            start=end+1;
            if(end==maxend)
                return false;
            end=maxend;
        }
        return true;
    }
};