class Solution {
public:
int jump(vector<int>& nums) {
vector<int> f(nums.size(), nums.size());
f[0] = 0;
for (int i = 0; i < nums.size(); ++i) {
for (int j = i+1; j < i+nums[i] && j < nums.size(); ++j) {
f[j] = min(f[i]+1, f[j]);
}
}
return f[nums.size()-1];
}
};
- TLE
class Solution {
public:
int jump(vector<int>& nums) {
int cur = 0;
int next = 0;
int i = 0;
int step = 0;
while (cur < nums.size()-1) {
while (i <= cur && i < nums.size()) {
next = max(next, i+nums[i]);
++i;
}
cur = next;
++step;
}
return step;
}
};
- AC
- 16ms
- beat 23.13%
class Solution {
public:
int jump(vector<int>& nums) {
int cur = 0;
int last = 0;
int result = 0;
for (int i = 0; i < nums.size(); ++i) {
if (i > last) {
last = cur;
result++;
}
cur = max(cur, i+nums[i]);
}
return result;
}
};
- AC
- 16ms
- beat 23.13%
>
class Solution {
public:
int jump(vector<int>& nums) {
int steps = 0, s1 = 0, s2 = 0;
for (int i = 0; i < nums.size(); ++i) {
//prunning!
if (s1 >= nums.size()-1) return steps;
//prunning!
s2 = max(nums[i]+i,s2);
if (i >= s1) {
s1 = s2;
steps++;
}
}
}
};
- discuss里面有一个相似的解法,但是添加了prunning,cool!