45. 跳跃游戏 II Jump Game II

题目 https://leetcode-cn.com/problems/jump-game-ii/

#define min(a,b) ((a)<(b)?(a):(b))
int jump(int* nums, int numsSize){
    
    
    int *dp = malloc(sizeof(int) * numsSize);//表示i跳到结尾的最小跳数
    int *dp2 = malloc(sizeof(int) * numsSize);//表示i跳到结尾的最小跳数的上一个结点
    dp[numsSize-1] = 0;
    dp2[numsSize-1] = numsSize;
    int i,j;
    for(i=numsSize-2;i>=0;i--){
    
    
        dp[i] = numsSize;
        for(j=i+1;j<=i+nums[i]&&j<numsSize;){
    
    
            if(dp[j] == numsSize){
    
    
                j++;
                continue;
            }
            
            if(dp[j]+1 < dp[i]){
    
    
                dp[i] = dp[j]+1;
                dp2[i] = j;
            }
            j = dp2[j];
            
            //dp[i] = min(dp[i],dp[j]+1);
            
        }
    }

    int index = dp[0];
    free(dp);
    free(dp2);
    return index;
}

猜你喜欢

转载自blog.csdn.net/ZRXSLYG/article/details/111599245