jump-game-ii

给出一个非负整数数组,你最初定位在数组的第一个位置。

数组中的每个元素代表你在那个位置可以跳跃的最大长度。   

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

样例

给出数组A = [2,3,1,1,4],最少到达数组最后一个位置的跳跃次数是2(从数组下标0跳一步到数组下标1,然后跳3步到数组的最后一个位置,一共跳跃2次)

class Solution {
public:
    /**
     * @param A: A list of lists of integers
     * @return: An integer
     */
   /* int jump(vector A) {
        int n=A.size();
        return helper(A,0);
    }
    int helper(vectorA,int cur){
        if(A[cur]>=A.size()-1-cur) return 1;
        int canjump=A[cur];
        int res=INT_MAX;
        for(int i=canjump;i>=1;i--){
            res=min(res,helper(A,cur+i)+1);
        }
        return res;
    }
    */
    
    int jump(vector A) {
        int n=A.size();
        vectordp(n,INT_MAX);
        dp[n-1]=0;
        for(int i=n-2;i>=0;i--){
            int canjump=A[i];
            if(A[i]>=n-1-i) dp[i]=1;
            else{
                for(int j=1;j<=A[i];j++){
                    dp[i]=min(dp[i],dp[i+j]+1);
                }
            }
        }
        return dp[0];
    }
};


你可能感兴趣的:(算法与数据结构)