Jump Game
Medium
GreedyArray
Problem
Given an array nums where nums[i] is your max jump length from index i, return true iff you can reach the last index starting from index 0.
Example 1
Input: nums = [2,3,1,1,4]
Output: true
Example 2
Input: nums = [3,2,1,0,4]
Output: false
Constraints
- 1 ≤ nums.length ≤ 10⁴
- 0 ≤ nums[i] ≤ 10⁵
Approach — Greedy
This is a Greedy problem. The idea: make the locally best choice at each step, which provably builds up to the global optimum here. Work through the reference code below line by line, then re-derive it yourself in the editor — that's how the pattern sticks.
Complexity: O(n log n) time.
Solution code
Python
class Solution:
def canJump(self, nums):
reach = 0
for i, x in enumerate(nums):
if i > reach:
return False
reach = max(reach, i + x)
return True
Java
class Solution {
public boolean canJump(int[] nums) {
int reach = 0;
for (int i = 0; i < nums.length; i++) {
if (i > reach) return false;
reach = Math.max(reach, i + nums[i]);
}
return true;
}
}
Practice it
Reading a solution isn't the same as being able to write it under pressure. Open this problem in the in-browser editor, hide the solution, and solve it from scratch — your code runs against real test cases instantly.
Solve Jump Game interactively → ← All solutions