解法一:DP time limit exceeded
dp[i] - 到达i position所需最小的步数
class Solution {
public:
int jump(vector<int>& nums) {
int n = nums.size();
vector<int> dp(n, INT_MAX);
dp[0] = 0;
for(int i=0;i<n;i++){
for(int j=0;j<i;j++){
if(dp[j]!=INT_MAX && nums[j]+j>=i) dp[i] = min(dp[i], dp[j]+1);
}
}
return dp[n-1];
}
};
解法二: Greedy
class Solution {
public:
int jump(vector<int>& nums) {
int j_cnt = 0, cur=0, n = nums.size(), last=0;
int i=0;
for(int i=0;i<n;i++){
if(i>last){
last = cur;
j_cnt++;
if(last>=n-1) break;
}
cur = max(cur, i+nums[i]);
}
return j_cnt;
}
};