2018-12-15

jump game.jpg

LeetCode 55. Jump Game

Description

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.

描述

给定一个非负整数数组,您最初定位在数组的第一个索引处。

数组中的每个元素表示该位置的最大跳转长度。

确定您是否能够到达最后一个索引。

思路

这道题和第46题属于同一题目,这道题更简单一点,只是问能否到达末尾。第46题在这里,解题在这里.

  • 我们声明一个变量maxindex表示当前能够走到的最大索引位置
  • 我们依次检查每一个位置能够走到的最大值,如果能够走到当前位置且当前位置能够走到的最远位置大于maxindex,我们就更新maxindex
  • 一旦maxindx大于等于索引最大值,我们返回True,否则我们一直遍历到末尾,如果此时maxindex还小于索引最大值,我们就返回False
  • 本题的基本思路也是贪心算法
# -*- coding: utf-8 -*-
# @Author:             何睿
# @Create Date:        2018-12-15 17:13:28
# @Last Modified by:   何睿
# @Last Modified time: 2018-12-15 17:19:47


class Solution:
    def canJump(self, nums):
        """
        :type nums: List[int]
        :rtype: bool
        """
        # 记录最远位置
        maxindex = 0
        for i in range(len(nums)):
            # 如果能偶到达当前位置并且当前位置能够到达的最远位置大于maxindex
            if maxindex >= i and i+nums[i] > maxindex:
                # 更新maxindex
                maxindex = i+nums[i]
            # 一旦maxindex大于等于最大索引,我们返回False
            if maxindex >= len(nums)-1:
                return True
        # 如果到末尾maxinde都小于最大索引,返回False
        return False


if __name__ == "__main__":
    so = Solution()
    res = so.canJump([3, 2, 1, 0, 4])
    print(res)

源代码文件在这里.
©本文首发于何睿的博客,欢迎转载,转载需保留文章来源,作者信息和本声明.

你可能感兴趣的:(2018-12-15)