- 跳跃游戏 II
难度
中等
905
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
你的目标是使用最少的跳跃次数到达数组的最后一个位置。
示例:
输入: [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
说明:
假设你总是可以到达数组的最后一个位置。
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int findop(int j){
int t=j+1,max=-1,time=0,res=0;
if(j+v[j]>=v.size()-1)
return v.size()-1;
while(t<=j+v[j]){
if((v[t]+time)>max){
max=v[t]+time;
res=t;
}
++t;
++time;
}
return res;
}
int main(){
char temp;
int num,step=0;
scanf("%c",&temp);
while(scanf("%d%c",&num,&temp)==2){
v.push_back(num);
}
for(int i=0;i<=v.size()-1;){
int op=findop(i);
step++;
if(i+v[op]>=v.size()-1)
{
cout<<step<<endl;
return 0;
}
i=op;
}
}
1⃣️定义最优点,这一步跳哪里最好,看跳过去后下一步能跳到最远的位置就是最优点,因为中途的选择更多。