贪心算法,每次选能跳最远的
public int jump(int[] nums) {
int ans = 0;
for(int i = 0 ; i < nums.length ; i = maxjump(i,nums) )
{
if(i == nums.length-1)
break;
ans++;
}
return ans;
}
public static int maxjump(int i , int[] arr)
{
int step = arr[i];
//如果步长比剩余的距离大,直接到达最后一步
if(step >= arr.length-1-i)
{
return arr.length-1;
}
int max = 0; // 能跳的最大距离
int index = i; // 返回的下标值
for(int j = i + 1 ; j <= i+step ; j++)
{
if(max <= arr[j] + j)
{
max = arr[j]+j;
index = j;
}
}
//找到i+step之间的最大值
if(i+step + arr[i+step] >= index + arr[index])
{
return i+step;
}
else
{
return index;
}
}