45. Jump Game II

跳跃游戏2

Posted by bbkgl on June 26, 2020

我有所感事

结在深深肠

贪心,每次跳跃都选择加上第二次跳跃距离后,和最远的哪个台阶。即选择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;
    }
};