问题:给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。
例如:
给定一个数组 A = [2,3,1,1,4]
跳到最后一个索引的最小跳跃数是 2
。(从索引 0 跳到 1 跳1
步,然后跳3
步到最后一个索引。)
#include<iostream>
#include<vector>
using namespace std;
int jump(int *data, int length)
{
int count = 0;
int A = length - 1;
vector<int> itec;
itec.push_back(length-1);//终点;
while (A != 0)
{
for (int i = 0; i < length; i++)
{
if ((data[i] + i) >= A)
{
A = i;
count++;
itec.push_back(i);
break;
}
}
}
cout << "跳跃途经点: " << endl;
for (vector<int>::reverse_iterator a = itec.rbegin(); a != itec.rend(); a++) //使用倒叙迭代器;
{
cout << *a << " ";
}
cout << endl;
return count;
}
int main()
{
//Solution data;
int data[] = { 2,4,5,2,7,5,4,2,1,4,1,3 };
cout << "最少跳跃次数: "<<jump(data, size(data)) << endl;
system("pause");
return 0;
}