算法(38)-动态规划(1)-跳跃游戏-C++

题目:给定一个非负整数数组,你最初位于数组的第一个位置

          数组中的每个元素代表你在该位置可以跳跃的最大长度(步数)。

          判断你是否能够到达最后一个位置。
输入:int arr[] = { 3,2,3,1,1,4 };
输出:2
题意:不明白的要去搜一下,网上很多说明。
思路:当前最优解+下一步的最优解   迭代或者递归来完成。这是解决此类问题最简化的模型之一。
上代码

//题目:位置,值;按值跳位置,最少步数
//思路:   1.  步数最少 当前步数cur最右边界+下一步最右边界  此处右边界为最优解
 //       2. 三个变量 jump cur next

//1.数组操作

int jump_test(vector<int> arr)
{
	if (arr.size() == 0)
	{
		return 0;
	}
	cout << "*****jumptest*****" << endl;
	for (auto it = arr.begin(); it != arr.end(); it++)
	{
		cout << *it << endl;
	}
	int jump = 0;
	int cur = 0;
	int next = 0;
	for (int i = 0; i < arr.size(); i++)
	{
		if (cur < i)//超过了当前jump的最大右边界了,必须跳
		{
			jump++;         //步数+1
			cur = next;     //下一步的右边界考上来
		}
		next = max(next, i + arr[i]);//下一步的右边界
	}
	return jump;


}

void jump_main()
{
	cout << "***********jump_main**********" << endl;
	int arr[] = { 3,2,3,1,1,4 };
	vector<int> varr;
	varr.insert(varr.begin(), arr[0], arr[3]);
	cout << "返回值" << jump_test(varr) << endl;

}


 

 

posted @ 2020-02-12 10:03  jasmineTang  阅读(177)  评论(0)    收藏  举报