【华为笔试】数值跳跃

给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的数值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数调到最后一个数。

输入描述:

第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行

输出描述:

输出一行,表示最少跳跃的次数
#include<iostream>
using namespace std;

int JMP(int a[], int n)
{
	int i=0,j=0;
	int step=0;
	while(j<n)
	{
		step++;
		int m=j;
		for(int k=i; k<=j; k++)
		{
			m=max(m,k+a[k]);
			if(m>=n-1)
				return step;	
		}
		i=j+1;
		j=m;
	}
	return step;
} 

int main()
{
	int n;
	cin>>n;
	int a[n];
	for(int i=0; i<n; i++)
		cin>>a[i];
	cout<<JMP(a, n)<<endl;
	return 0;
}
点赞