45. 跳跃游戏 II
题目
解题思路
用贪心算法的思想,到达最后用的跳跃次数最少可以转化成,每走一步有着最大的边界。
遍历除最后一个元素以外的数组。
一直遍历到当前的数组边界,同时寻找最远的跳跃位置。
当我们超过当前数组边界时,进行一次跳跃,并更新我们的数组边界为最远跳跃位置。
int jump(int* nums, int numsSize)
{
int end = 0;
int Max_Position = 0;
int count = 0;
// 最后一个数组不进行遍历,因为nums[numsSize-1]没意义
// 且若数组长度为1时可不进行循环,则count=0
for(int i=0;i<numsSize-1;i++)
{
// 更新最大的位置
Max_Position = Max_Position>i+nums[i] ? Max_Position : i+nums[i];
// 最大位置超过数组长度则返回
if(Max_Position >= numsSize-1)
return count+1;
// 超过当前边界则跳跃次数加一
// 更新最大边界
if(end == i)
{
count++;
end = Max_Position;
}
}
return count;
}
效果
时间复杂度O(N)
空间复杂度O(1)