题目 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;
}