LeetCode - jump game II

解法一: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;
    }
};

猜你喜欢

转载自blog.csdn.net/real_lisa/article/details/83744314