和中等难度那道题一样,只不过返回的是最小的步数。
思路:
基于贪心,每次看看跳一步以后,下一步最远能跳到哪,那就跳那一步。
代码:
public int jump(int[] nums) {
//思路:基于贪心策略,看看跳一次最远能跳到哪
int start = 0;
int end = nums.length - 1;
int count = 0;
while (start < end) {
int far = 0;
int far_index = 0;
//防止数组下标溢出
int fin = start+nums[start];
if (fin >= end)
return ++count;
for (int i = start + 1; i <= fin; i++) {
if (i + nums[i] > far) {
far = i + nums[i];
far_index = i;
}
}
start = far_index;
count++;
}
return count;
}