
BFS
bfs 不超时 有例子易懂
class Solution {
public:
int minJump(vector<int>& jump) {
int N=jump.size();
vector<int> vis(N,0);
queue<int> q;
queue<int> num;
for(int i=0;i<N;i++)
num.push(i);
q.push(0);
vis[0]=1;
int dist=0;
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++){
int tmp=q.front();
q.pop();
if(tmp+jump[tmp]>=N)
return dist+1;
if(vis[tmp+jump[tmp]]==0){
vis[tmp+jump[tmp]]=1;
q.push(tmp+jump[tmp]);
}
while(!num.empty() && num.front()<tmp){ / 向左弹射到任意左侧弹簧的位置
int top=num.front();
num.pop();
if(vis[top]==0){
vis[top]=1;
q.push(top);
}
}
}
++dist;
}
return -1;
}
};
愣是没看懂,留着等个缘分
class Solution {
int d[1000005],q[1000005],he,ta;
public:
int minJump(vector<int>& jump) {
int n=jump.size(),i,l=0;
fill(d,d+n,-1);
d[0]=0;
he=ta=0;
q[ta++]=0;
while(he!=ta)
{
i=q[he++];
if(i+jump[i]>=n)break;
if(!~d[i+jump[i]])d[q[ta++]=i+jump[i]]=d[i]+1; / 等同于if(d[i+jump[i]]==-1)
for(;l<i;l++)if(!~d[l])d[q[ta++]=l]=d[i]+1;
}
return d[i]+1;
}
};