LeetCode 55. Jump Game(贪心)

题目来源:https://leetcode.com/problems/jump-game/

问题描述

55. Jump Game

Medium

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.

------------------------------------------------------------

题意

给定数组nums,一开始在数组头,每次跳动的最大距离是跳动始端在数组中的值。判断能否从数组始端跳到数组末端。

------------------------------------------------------------

思路

维护两个初值均为n-1(n为数组长度)的指针left和valid。left从n-1向0遍历,valid指向可以当前可以达到n-1的最小index(贪心的思想体现在只需要维护“最小”的可以达到n-1的index)。当left达到0后,如果valid也达到0,则说明可以从数组始端跳到数组尾端,否则不能。

------------------------------------------------------------

代码

class Solution {
    public boolean canJump(int[] nums) {
        int n = nums.length;
        if (n <= 1)
        {
            return true;
        }
        int left = n - 1, valid = n - 1;
        for (left = n-2; left >= 0; left--)
        {
            if (valid - left <= nums[left])
            {
                valid = left;
            }
        }
        return valid == 0;
    }
}

猜你喜欢

转载自blog.csdn.net/da_kao_la/article/details/89263710