---
# System prepended metadata

title: 55. Jump Game
tags: [Leetcode, greedy, medium, python, Top 100 Liked Questions]

---

###### tags: `Leetcode` `medium` `greedy` `python` `Top 100 Liked Questions`

# 55. Jump Game

## [題目連結:] https://leetcode.com/problems/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.


**Example 1:**
```
Input: nums = [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: nums = [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.
```

## 解題想法:
兄弟題目: [45. Jump Game II](/XjnNVTJVSWqvC4YHEZMK0A)

* 此題要求判斷是否能跳到last index
    * nums[i]表示由i最多可以一次跳nums[i]格
* greedy:
    * far_pos紀錄目前所走過的路中，能跳到最遠的位置
    * 一路遍歷每格，若該格cur_pos已經>far_pos表示無法再往前了

## Python:
``` python=
class Solution(object):
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        far_pos=0
        for cur_pos in range(len(nums)):
            if far_pos>=len(nums)-1:
                return True
            if cur_pos>far_pos:
                return False
            far_pos=max(far_pos,cur_pos+nums[cur_pos])
        return False
        
if __name__ == '__main__':
    result = Solution()
    ans = result.canJump(nums = [2,0])
    print(ans)

#nput: nums = [2,3,1,1,4]
#Output: true
```