leetcode jump gameII
看了题解,用BFS是比较好的思路,一层表示当前步能到的节点,curmax表示最远的,和贪心有异曲同工之妙
class Solution {
public:
int jump(vector<int>& a) {
int n=a.size();
if(n<=1) return 0;
int i=0, level=0, curmax=0, nextmax=0;
while(i<=n-1){
for(;i<=curmax && i<=n-1;i++){
nextmax=max(nextmax, a[i]+i);
if(nextmax>=n-1) return level+1;
}
curmax=nextmax;
level++;
}
return -1;
}
};
之前写的dp,TLE了,当DP思维训练了
class Solution {
public:
int jump(vector<int>& a) {
int n=a.size();
if(n<=1) return 0;
int dp[n];
dp[0]=0;
for(int i=1;i<n;i++){
dp[i]=INT_MAX;
for(int j=0;j<i;j++){
if(a[j]>=i-j)dp[i]=min(dp[i], dp[j]+1);
}
}
return dp[n-1];
}
};