LeetCode Jump Game II 前跳游戏II

原创 2013年12月07日 09:02:57

Jump Game II 

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Your goal is to reach the last index in the minimum number of jumps.

For example:
Given array A = [2,3,1,1,4]

The minimum number of jumps to reach the last index is 2. (Jump 1 step from index 0 to 1, then 3 steps to the last index.)

这个类型的题目,先不要想去用什么动态规划法,二分法等等,而是先要搞清楚它的游戏规则。

感觉题意还是不是那么清楚,需要先回答三个问题:

1 是否可以从任意位置取数?

2 是否可以利用重复数?

3 每取一个数是否需要跳尽?

答:

1 不可以,只能取当前位置的数

2 不可以

3 不用,不超跳就行,比如当前数是10,那么可以跳0到10步,当然我们不会跳0步。

 下面两个算法都很简洁的。

第一个程序:

这个程序好理解点。

	int jump(int A[], int n) {
		if(n==1) return 0;//注意:别忘了特殊情况判断!
		int i = 0, last = 0, maxIndex = 0, step = 0;
		while (i+A[i] < n-1)//=n-1的时候就已经到达尾端了,所以不是n
		{
			for (maxIndex = i; last <= i+A[i]; last++)
				if (last+A[last] >= maxIndex+A[maxIndex]) maxIndex=last;
			step++;
			i = maxIndex;
		}
		return ++step;
	}

这个程序也很简洁,动动手就能理解了。
http://discuss.leetcode.com/questions/223/jump-game-ii

int jump2(int A[], int n) {
		int ret = 0;
		int last = 0;
		int curr = 0;
		for (int i = 0; i < n; ++i) {
			if (i > last) {
				last = curr;
				++ret;
			}
			curr = max(curr, i+A[i]);
		}

		return ret;
	}


 

 和上面的下标处理有一点点不一样。

//2014-1-27
	int jump(int A[], int n) 
	{
		int num = 0;
		int rec_pos = 0;
		int max_step = 0;

		for (int i = 0;rec_pos < n-1; i++)
		{
			if (A[i]+i > max_step) max_step = A[i]+i;
			if (i >= rec_pos)
			{
				rec_pos = max_step;
				num++;
				max_step = 0;
			}
		}
		return num;
	}

 

 

 

 

 

 

 

版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者允许不得转载。

相关文章推荐

leetCode 45.Jump Game II (跳跃游戏) 解题思路和方法

Jump Game II Given an array of non-negative integers, you are initially positioned at the first i...

[leetcode]45. Jump Game II 跳棋游戏2 C++/PYTHON实现【hard难度】

题目 Given an array of non-negative integers, you are initially positioned at the first index of the...

Leetcode #45. Jump Game II 跳跃游戏2 解题报告

1 解题思想今天从4点就在赶一个作业,赶死我了。。。被猪队友坑的节奏,赶在12点钱来更新。。更新完继续写作业,好累。还是到Hard的模式,还是简单点说,这道题还是跳跃游戏,每一位置的取值代表能跳到的最...

LeetCode | Jump Game II(跳跃游戏II)

Given an array of non-negative integers, you are initially positioned at the first index of the arra...

leetcode解题之45. Jump Game II&55. Jump Game java (跳跃游戏)

leetcode解题之45. Jump Game II&55. Jump Game java (跳跃游戏)。动态规划,贪心。

DAY20:leetcode #45 Jump Game II

Given an array of non-negative integers, you are initially positioned at the first index of the arra...

leetcode45 Jump Game II

题目: Given an array of non-negative integers, you are initially positioned at the first index of th...

[LeetCode]Jump Game II

Jump Game II

leetcode笔记:Jump Game II

该题的大意是,给定一个数组,每个元素代表从该位置可以往后跳的距离,问从第一个位置跳到最后一个位置至少需要跳多少次。与 Jump Game 有所不同的是,Jump Game 询问该数组能否跳到最后一格,...

LeetCode | 45. Jump Game II

Given an array of non-negative integers, you are initially positioned at the first index of the arra...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)