思路:
每次其实是跳一个区间,即下一个可到达的区间是上一个可到达区间内的点可跳的最远的点,用公式表达即是:
R_i+1 = Max(L_i+nums[L_i], L_i+1+nums[L_i+1], ..., R_i + nums[R_i])L_i+1 = R_iL_0 = R_0 = 0复制代码
往往思路会局限于点到点之间的跳跃
java代码:
class Solution {
public int jump(int[] nums) {
int left, right, index;
left = right = index = 0;
int n = nums.length;
while (right < n-1) {
index++;
int rmax = left+nums[left];
for (int i = left+1; i <= right; i++) {
rmax = Math.max(rmax, i+nums[i]);
}
left = right;
right = rmax;
}
return index;
}
}
复制代码