您的位置:首页 > 其它

leetcode:Jump Game II

2014-06-13 00:06 344 查看
给出一维的数据,A[i]表示在第i个位置可以最大步跃为A[i],也就是求出到达数组末端最少要跳几次

刚开始的时候给出了一个O(n^2)的解法,后来超时了,然后优化到o(N)。

是一道dp题目,状态方程如下

在第i次跳跃中,pre为开始位置,假设最远可以跳到next位置

那么在pre-next的区间dp[] = i;

那么第i+1次的跳跃可以就是以next + 1开始,下一次最远可以到的next值就是Max(A[j] + j) pre <= j <= next

public class Solution {
public int jump(int[] A) {
int[] dp = new int[A.length + 1];
for(int i = 1; i < A.length; ++i){
dp[i] = Integer.MAX_VALUE;
}
int cur = 1;
int pre = 0, next = A[0];
//			System.out.println(A.length);
for(int i = 1; i < A.length && i <= next; ){
int maxJump = 0;
while(i < A.length && i <= next){
dp[i] = cur;
if(A[i] + i > maxJump){
maxJump = A[i] + i;
}
++i;
}
cur ++;
pre = next + 1;
next = maxJump;
}

return dp[A.length - 1];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: