我有所感事
结在深深肠
贪心,每次跳跃都选择加上第二次跳跃距离后,和最远的哪个台阶。即选择j + nums[j]
最大的那个台阶j
,且j
能够从i
的位置跳到。。。
当然一开始我还是用dp做的,跳台阶第一反应就是dp。
但是dp会超时。
class Solution {
public:
int jump(vector<int>& nums) {
int len = nums.size();
int ans = 0;
if (len == 1) return 0;
for (int i = 0; i < len;) {
int maxj = i + 1;
for (int j = i + 1; j <= i + nums[i] && j < len; j++) {
if (j >= len - 1) {
maxj = j;
break;
}
int step = nums[j] + j;
if (step > nums[maxj] + maxj)
maxj = j;
}
i = maxj;
ans++;
if (i == len - 1)
return ans;
}
return ans;
}
};