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-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2522

数据结构与算法[LeetCode]——Jump Game I II

Jump Game II Given an array of non-negative integers, you are initially positioned at...
  • SUN20082567
  • SUN20082567
  • 2014年04月14日 19:39
  • 389

【算法】【Greedy】Jump Game II

Given an array of non-negative integers, you are initially positioned at the first index of the arra...
  • wurlin
  • wurlin
  • 2017年12月28日 12:31
  • 18

LeetCode OJ 之 Jump Game II(“跳跃”游戏 - 二)

题目: Given an array of non-negative integers, you are initially positioned at the first index of...
  • u012243115
  • u012243115
  • 2015年01月13日 08:27
  • 459

【leetcode】Jump Game I, II 跳跃游戏一和二

题目: Jump Game I: Given an array of non-negative integers, you are initially positioned at th...
  • u012204343
  • u012204343
  • 2014年08月28日 00:55
  • 926

经典算法——Jump Game(II)

Given an array of non-negative integers, you are initially positioned at the first index of the arra...
  • geekmanong
  • geekmanong
  • 2016年04月08日 15:14
  • 753

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016年11月16日 22:45
  • 2791

买卖股票的最佳时机I II III IV

买卖股票的最佳时机I II III IV I假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。II假设有一...
  • u010669349
  • u010669349
  • 2017年12月22日 22:47
  • 34

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3284

Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

1.问题描述  写一个高效的算法,从一个m×nm\times n的整数矩阵中查找出给定的值,矩阵具有如下特点:    每一行从左到右递增。 每一列从上到下递增。 2. 方法与思路2.1 二分查找法 ...
  • Jeanphorn
  • Jeanphorn
  • 2015年07月23日 20:41
  • 3113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode Jump Game II 前跳游戏II
举报原因:
原因补充:

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