Jump Game II

来源:互联网 发布:微店 淘宝客 编辑:程序博客网 时间:2024/05/16 11:14

class Solution {public:    int jump(int A[], int n) {//table[i] 为 i jump to n-1 的最少步数,超时int *table=new int[n];memset(table,-1,n*sizeof(int));table[n-1]=0;        return _jump(A,n,0,table);    }int _jump(int A[],int n,int i,int *table){if(table[i]==-1){if(i+A[i]>=n-1){table[i]=1;}else{int minVal=INT_MAX;for(int j=i+1;j<=i+A[i] && j<(n-1);j++){minVal=min(minVal,_jump(A,n,j,table));}table[i]=minVal+1;}}return table[i];}};

class Solution {public:    int jump(int A[], int n) {        if(n==1) return 0;        int pre=0,cur=A[0],next=A[0];/*pre:上一个可以到达区域的右边界cur:由[0:pre]Jump可以到达区域的右边界next:由[0:cur]Jump可以到达区域的右边界*/if(cur>=n-1){    return 1;}int step=0;while(pre<cur){    step++;for(int i=pre+1;i<=cur;i++){next=max(next,i+A[i]);if(next>=n-1){return step+1;}}pre=cur;cur=next;next=cur;}return -1;    }};


0 0
原创粉丝点击