LeetCode---45.跳跃游戏II

题目来源:https://leetcode-cn.com/problems/jump-game-ii/description/

题目描述:

算法描述:这题是上一个题的升级版,详情请见https://blog.csdn.net/qq_39241239/article/details/82692390

这题也是一个典型的贪心算法。每当走到一个位置index,就遍历这个位置能到达的所有位置i(index+1~index+nums[index]),遍历过程中找出这些位置能到达的最远距离max,并记录这个max对应的位置i。遍历完之后,就可以从现在的位置index走到位置i。然后如此循环~~~

代码如下:

int jump(int* nums, int numsSize) {
    int step=0;//当前走的步数 
	int index=0;//当前位置 
	int p=0;//存放下一步的位置 
	while(index<numsSize){
		//现在的位置加上该位置可以走的步数>numsSize-2,说明再走一步就能到终点。 
		if(index+nums[index]>numsSize-2){
			return step+1;
		}
		int max=0; //存放下一步能到达的最远位置
		//遍历当前当前位置能到达的所有位置,找出下一步能到达的最远距离 
		for(int i=index+1;i<=index+nums[index];i++){
			if(max<i+nums[i]){
				max=i+nums[i];
				p=i;
			}
		}
		step++;
		index=p; //走到下一步 
	} 
	return step;
}

猜你喜欢

转载自blog.csdn.net/qq_39241239/article/details/82706252
今日推荐