LeetCode-Jump Game II-跳跃游戏-BFS
https://oj.leetcode.com/problems/jump-game-ii/
这道题要是直接DP就跪了。将其当成一个图论问题,则每个i节点到其随后的A[i]个节点都有一条边。BFS搜索并标记能够避免计算后面又到达的一些顶点因而是O(n)的算法。
BFS还需要针对性的少于优化,首先扩展新结点要从后向前,并且在n-1作为新节点产生时立即返回答案才能AC全部case。
const int INF=9999;
class Solution {
public:
vector <int> d;
int jump(int A[], int n) {
if (n<=1) return 0;
d.resize(n,INF);
d[0]=0;
queue <int> que;
que.push(0);
while(!que.empty()){
int t=que.front();
que.pop();
for (int i=min(t+A[t],n-1);i>t;i--){
if (d[i]==INF){
d[i]=d[t]+1;
if (i==n-1) return d[n-1];
que.push(i);
}
}
}
return d[n-1];
}
};
浙公网安备 33010602011771号