BFS + 剪枝 勉强AC
class Solution {
public:
int jump(vector<int>& nums) {
int len = nums.size();
queue<pair<int,int>> q;
q.push(make_pair(0,0));
bool vis[100001]; memset(vis,0,sizeof(vis));
while(!q.empty()){
int idx = q.front().first;
int step = q.front().second;
q.pop();
vis[idx] = 1;
if(idx >= len-1) return step;
for(int i = nums[idx]; i >= 1; i--){
if(!vis[idx+i])
q.push(make_pair(i+idx,step+1));
}
}
return -1;
}
};
JAVA超时
class Solution {
public int jump(int[] nums) {
int len = nums.length;
LinkedList<Pair<Integer,Integer>> list = new LinkedList<Pair<Integer,Integer>>();
list.offer(new Pair(0,0));
boolean vis[] = new boolean[100001];
while(!list.isEmpty()){
int idx = list.peek().getKey();
int step = list.peek().getValue();
list.pop();
vis[idx] = true;
if(idx >= len-1) return step;
for(int i = nums[idx]; i >= 1; i--){
if(vis[idx+i] == false)
list.offer(new Pair(idx+i,step+1));
}
}
return -1;
}
}