题目描述:一个非负整数的数组nums,现在在第一个位置,每次最多跳跃num[i],问最少多少步能够跳到数组的最后一个位置(保证每次都能跳到最后)?
分析:假设现在在位置record (0<=record<nums.length),下一步的位置index, 范围在[record+1, record+nums[record] ],那么 index+nums[index]应该最大;
代码:
public class Solution {
public int jump(int[] nums) {
int result = 0; //跳跃步数
int record = 0; // 当前所在位置
int index; // 当前所在位置,能跳到地方的跳跃步数的最大值
if (nums.length >= 2) {
while (record <= nums.length) {
if (record + nums[record] >= nums.length - 1) {
result++;
return result;
} else {
index = record + 1;
for (int i = record + 1; i < record + 1 + nums[record] && i < nums.length; i++) {
if (nums[index] < nums.length && nums[index] + index <= nums[i] + i) {
index = i;
}
}
record = index; // 下一步跳到record
result++;
}
}
}
return result;
}
}