给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 说明:假设你总是可以到达数组的最后一个位置
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int jump(int* nums, int numsSize){
//1.分析程序,非负整数数组,加上说明中的总可以到达数组的最后一个数组,就说明可以为零,但不影响到最后一个位置,所以0前面的数至少有一个可以跳
//过,所以0是不影响的
//2.最少的步数到达最后,那我就从最后一个数倒推,假如我是最后一个数,那么前面的可以直接可以到我的同学排个队
//3.我挑一个最靠前的,然后这个最靠的数就又成了最后一个数,它前面的数只要最少步数到达它就ok了。典型的贪心算法
int i =numsSize-1;
int result=0;
while(i>0)
{
int max;
for(int j =i-1;j>=0;j--)
{
if(nums[j]>=(i-j))
max =j;
}
i=max;
result++;
}
return result;
//这执行用时有点高欸!
}
执行结果:
通过
显示详情
执行用时 :
640 ms
, 在所有 c 提交中击败了
17.14%
的用户
内存消耗 :
8.1 MB
, 在所有 c 提交中击败了
68.85%
的用户