Jump Game(55题):贪心算法,数组

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.

For example:
A = [2,3,1,1,4], return true.

A = [3,2,1,0,4], return false.


一个比较经典的游戏,给定数组判断能否到达终点。每个位置的数字表示可以往下跳跃的最大步数。如果可以到达数组最后一个元素(也可超出)则判定为true;

首先想到的是回溯算法(比较暴力),即每次达到一个位置进行循环递归,分别找出前进1,2,3,4.。。直到当前数字的步数时是否能判定通过。时间复杂度应该是指数级别的(没有仔细运算)。

第二种是贪心算法,即每次都找到局部最优解,即记录当前点能达到的距离(当前点 + 当前位置步数)较大的值。如果这个值大于或等于数组最有一个元素位置,则返回true。在此过程中如果不能到达下一个点,则返回false。

代码:

class Solution {
    public boolean canJump(int[] nums) {
        //考虑特殊情况
        if(nums.length < 1)
            return false;
        if(nums.length == 1)
            return true;
        int whole = 0;
        for(int i = 0;i < nums.length - 1;i ++){
            int local = nums[i] + i;
            whole = Math.max(whole,local);
            //判断是否能到达下一位置
            if(whole < i + 1)
                return false;
            //如果能到达结尾就退出
            else if(whole >= nums.length - 1)
                return true;
        }
        //无效判定,因为前面一定能结束,为了通过编译。
        return true;
    }
    
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值