leetcode: Jump Game

本文介绍了一种判断能否跨越障碍的算法实现。该算法通过记录可达最远位置和最近障碍位置来判断是否能够到达终点。文章提供了一个具体的Java实现案例。

用Jump gameII的方法当然能解,不过有更简单的想法:

什么时候走投无路呢?0,不然至少可以向下走一步。

所以只要找所有为0的点。记录上一个A[i]=0的i为prev0.

记录当先能达到的最远点为max。每次找到一个新的A[i]=0,

遍历从prev0到i的所有结点,看能不能跨过i,不能就返回true。

注意如果i=n-1,不管A[n-1]是不是0,都成功了。

public class Solution {
    public boolean canJump(int[] A) {
       int i,j;
        int prev0=-1;
        int n=A.length;
        int max=0;
        for(i=0;i<n;i++)
        {
        	if(A[i]==0)
        	{
        		if(i==n-1)
        			return true;
        		for(j=prev0+1;j<i;j++)
        		{
        			if(j+A[j]>max)
        				max=j+A[j];
        		}
        		//System.out.println(j);
        		if(max<=i)
        			return false;
        		prev0=i;
        	}
        }
        return true;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值