题解思路:
代码如下:
/*
* 贪心算法
*
* 指针i 从头到尾依次遍历数组,假设以每个元素作为起点开始跳跃
* 每一次跳后,寻找能跳的最远点,并记录下来,用maxPosition记录,它是一个变量。
* 如果指针i 遍历到之前记录的最远点(用边界end记录)时,则更新边界end。
* 此时更新完后的边界end 在 指针i 的后面,
* 指针i 每次遇到之前记录最远点(end)则step++
*
* Note:指针i 不能遍历最后一个元素,因为遍历前面的元素就可以跳到最后一个位置
* 如果遍历最后一个元素,则step会多记录一步
*
* Code by java
*/
class Solution {
// public static void main(String[] args) {
// int[] kk = { 2,3,1,1,4 };
// System.out.println(Solution.jump(kk));
// }
public /* static */ int jump(int[] nums) {
int end = 0;
int maxPosition = 0;
int steps = 0;
for(int i = 0; i < nums.length - 1; i++){
maxPosition = Math.max(maxPosition, nums[i] + i); //找能跳的最远的
if( i == end){ //遇到边界,就更新边界,并且步数加一
end = maxPosition;
steps++;
}
}
return steps;
}
}