LeetCode Jump Game II
2013-12-26 20:27
274 查看
第一次 递归
第二次 DP
第三次 DP带优化的
int jump_res(int *arr,int n,int cur) { if (cur>=n-1) return 0; int minv = Inf; for (int i=1;i<=arr[cur];i++) { int tempv = 1+jump_res(arr,n,cur+i); if (minv>tempv) { minv = tempv; } } return minv; } int jump(int A[], int n) { return jump_res(A,n,0); }
第二次 DP
int jump(int A[],int n) { int *dp = new int ; dp[0] = 0; for (int i=1;i<n;i++) { if (i<A[0]) dp[i] = 1; else dp[i] = 100000; } if(dp[n-1]==1) return 1; for (int i=1;i<n-1;i++)//to the n-1, A[n-1] is not important { for (int k=1;k<=A[i];k++) { if (i+k<n&&dp[i]+1<dp[i+k]) { dp[i+k] = dp[i] + 1; } } } return dp[n-1]; delete[] dp; }还是time limited
第三次 DP带优化的
int jump(int A[],int n) { int *dp = new int ; dp[0] = 0; for (int i=1;i<n;i++) { if (i<=A[0]) dp[i] = 1; else dp[i] = 100000; } if(dp[n-1]==1) return 1; for (int i=1;i<n;i++)//to the n-1, A[n-1] is not important { if (A[i]<A[i-1])// this optimization is important continue; for (int k=1;k<=A[i]&&i+k<n;k++) { if (i>=k&&A[i]+k<=A[i-k])//A[i-k] would be more close than A[i] to A[n-1] continue; if (dp[i]+1<dp[i+k]) { dp[i+k] = dp[i] + 1; } } } return dp[n-1]; delete[] dp; }通过了
相关文章推荐
- LeetCode-Jump Game II-跳跃游戏-BFS
- 【LeetCode】Jump Game II 解题报告
- leetcode45 Jump Game II
- leetcode 45:Jump Game II
- [Leetcode] jump game ii 跳跃游戏
- LeetCode_Jump Game II
- Leetcode:Jump Game II
- [LeetCode]045-Jump Game II
- 【Leetcode】Jump Game II
- [LeetCode] Jump Game II
- [leetcode]Jump Game II
- LeetCode Jump Game II
- LeetCode | Jump Game II(跳跃游戏II)
- LeetCodee 108 Jump Game II
- [LeetCode] Jump Game II
- Leetcode (45) Jump Game II
- LeetCode(45) Jump Game II
- LeetCode_Jump Game II
- LeetCode Jump Game II
- leetcode之jump game II