人无远虑,必有近忧,如果只顾着当前利益,不为自己的将来做打算的话,结果往往不如人意
这道题也是一个道理,如果我们只是想着这一步能走的最远距离是多少,那么我们肯定是达不到预期的效果的,所以我们在走每一步的时候要想着下一步,简单说,就是考虑下两步能达到的最远距离,来决定下一步该到达的位置,最远的,不一定是最好的。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最少需要跳跃几次能跳到末尾
* @param n int整型 数组A的长度
* @param A int整型一维数组 数组A
* @return int整型
*/
public int Jump (int n, int[] A) {
// write code here
int res = 0;// 结果
int pos = 0;// 当前位置
int step, max, maxStep;
while (true) {
if (pos + A[pos] >= n - 1) {
return res + 1; // 如果当前位置的可达区域比n - 1还要大, 则加一返回结果
}
step = 1; // 遍历可达位置用
max = A[pos + step] + 1; // 接下来两步走的最远距离
maxStep = 1; // 假如走一步能使其在走下一步之后达到最远距离
while (step <= A[pos]) { // 遍历, 刷新maxStep
if (A[pos + step] + step >= max) { // 如果走这一步加上下一步走的比max更大,刷新max和maxstep
max = A[pos + step] + step;
maxStep = step;
}
step++;
}
pos += maxStep;
res++;
}
}
}