算法(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;
}

浙公网安备 33010602011771号