Jump Game
You are given an integer array `nums`. You are initially positioned at the array's first index, and each element in the array represents your maximum jump length at that position. Return `true` if you can reach the last index, or `false` otherwise.
Examples
Constraints
1 <= nums.length <= 10^40 <= nums[i] <= 10^5
Greedy Approach
Approach
We can work backwards from the last index to the first index. We maintain a `goal` index, which is initially the last index. We iterate from the second-to-last index down to the first index. At each step `i`, we check if we can reach the `goal` from `i` (i.e., `i + nums[i] >= goal`). If we can, we update the `goal` to be `i` because if we can reach `i`, we can reach the original `goal`. At the end, if the `goal` has reached index `0`, it means we can reach the end from the beginning.
Complexity Analysis
Time complexity is O(n) because we do a single backward pass through the array. Space complexity is O(1) as we only need one variable to store the goal.
class Solution { public boolean canJump(int[] nums) { int goal = nums.length - 1; for (int i = nums.length - 2; i >= 0; i--) { if (i + nums[i] >= goal) { goal = i; } } return goal == 0; }}