Jump Game II

来源:互联网 发布:空总激光美容中心 知乎 编辑:程序博客网 时间:2024/06/05 10:22


一开始写了一个O(n^2)的方法,大数据果断超时

代码如下:

class Solution {public:    int jump(int A[], int n) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int dp[n];        memset(dp,0x7f7f7f7f,sizeof(dp));        dp[0]=0;        for(int i=0;i<n;i++)            for(int j=0;j<i;j++){                if(canReach(A,j,i))                    dp[i]=min(dp[i],dp[j]+1);            }        return dp[n-1];    }    bool canReach(int A[],int i,int j){        if(A[i]+i>=j) return true;        return false;    }};
这里也有需要注意的地方,比如说dp的初值的设置,0x7f,会把每个单元都设置成7f。


最后参考了一下discuss,发现第一个人给出的解法非常经典:

class Solution {public:    int jump(int A[], int n) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int last=0,end=0,res=0;        for(int i=0;i<n;i++){            if(i>last){                res++;                last=end;            }            end=max(A[i]+i,end);        }        return res;    }};
last用于记录该点可以到达的最终的位置,可以利用i->last得到下一次能够得到的最大的位置end。当i超过last的时候,说明需要一步跳跃。

原创粉丝点击