45. Jump Game II
You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0].
Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], you can jump to any nums[i + j] where:
0 <= j <= nums[i] and
i + j < n
Return the minimum number of jumps to reach nums[n - 1]. The test cases are generated such that you can reach nums[n - 1].
Example 1:
Input: nums = [2,3,1,1,4]
Output: 2
Explanation: The minimum number of jumps to reach the last index is 2. Jump 1 step from index 0 to 1, then 3 steps to the last index.
Example 2:
Input: nums = [2,3,0,1,4]
Output: 2
Constraints:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
It’s guaranteed that you can reach nums[n - 1].
题目来源:leetcode
我自己的笨解法
class Solution {
public:
int N = 10010;
int min(int a,int b){
if(a < b) return a;
else return b;
}
int jump(vector<int>& nums) {
int n = nums.size();
int dp[N];
memset(dp,10010,sizeof dp);
for(int i = 0;i < n;i++){
if(i == 0) dp[0] = 0;
for(int j = i + 1;j <= i + nums[i];j++){
if(j == n - 1){
dp[j] = min(dp[j],dp[i] + 1);
return dp[n-1];
}
else{
dp[j] = min(dp[j],dp[i] + 1);
}
}
}
return dp[n-1];
}
};
官方题解
class Solution {
public:
int jump(vector<int>& nums) {
int maxPos = 0, n = nums.size(), end = 0, step = 0;
for (int i = 0; i < n - 1; ++i) {
if (maxPos >= i) {
maxPos = max(maxPos, i + nums[i]);
if (i == end) {
end = maxPos;
++step;
}
}
}
return step;
}
};