作者:克拉克华
链接:https://www.nowcoder.com/discuss/507047?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack
来源:牛客网
从起点开始接下来有N个方块,相邻方块间的距离都为1,每个方块上有增加体力的食用蘑菇或减少体力的毒蘑菇,蘑菇带来的体力改变是已知的。一个人初始体力为m,每次可以往前跳任意个方块,体力耗尽就会死掉。每跳一次消耗的体力与跳的距离成正比,比例为1。问这个人能否跳到终点,如果能,求可能剩余的最大体力。
该题是leetcode 55. 跳跃游戏 的变形
int[] arr = {1, 2, 3, -2, 5);
题目的意思是:
初始体力为m,最终要跳到终点,终点应该是跳过 下标arr.length-1,
也就是至少要跳到arr.length下标处。
重组一个数组:// 个人习惯,也可以直接用arr
int[] nums = {m, 1, 2, 3, -2, 5, 0}; // 在arr前加了个m,在arr后加了个0
public int jump(int[] nums, int m) {
int currFurthest = 0;
int n = nums.length;
int res = -1;
for (int i = 0; i < n-1; i++) {
currFurthest = Math.max(currFurthest, i + nums[i]);
if (currFurthest <= i) {
break;
}
if (currFurthest >= n-1) {
res = Math.max(res, currFurthest - (n-1));
}
}
return res;
}
返回结果是-1,则不能跳到终点。
返回结果是非负数,则表示跳到终点后还剩余的最大体力值。