55. Jump Game
来源:互联网 发布:2011年nba总决赛数据 编辑:程序博客网 时间:2024/06/17 14:59
尝试用dp思想解决这个问题,答案是正确的,但是超时了。尝试改进dp。
class Solution {public: bool canJump(vector<int>& nums) { vector<int> dp(nums.size(),0); dp[nums.size()-1]=nums.size()-1; for(int i=nums.size()-2;i>=0;i--) { for(int j=i+1;j<=i+nums[i];j++) { if(j<nums.size()) dp[i]=max(dp[i],dp[j]); } } if(dp[0]==nums.size()-1) return true; else return false; }};
改进后的代码,新增加一个sum数组存储结果,因为dp在更新的时候,需要选出[i+1,i+n[i]]之间的最大值。现在减少计算步骤,不再搜素最大值,而是判断i能不能到达尾部,可以就是1,不可以就是0。并且统计sum数组,计算之前dp的和。dp[i]在更新时候,通过计算sum[i+1]-sum[i+1+n[i]]得到,如果该数字大于1,那么这之间一定存在一个数,它可以到达末尾,否则就不存在。
class Solution {public: bool canJump(vector<int>& nums) { vector<int> dp(nums.size(),0); vector<int> sum(nums.size(),0); dp[nums.size()-1]=1; sum[nums.size()-1]=1; for(int i=nums.size()-2;i>=0;i--) { if(i+nums[i]+1>=nums.size()) dp[i]=sum[i+1]>=1?1:0; else dp[i]=(sum[i+1]-sum[i+nums[i]+1])>=1?1:0; sum[i]=sum[i+1]+dp[i]; } if(dp[0]==1) return true; else return false; }};
0 0
- 55. Jump Game && 45. Jump Game II
- 55. Jump Game. 45. Jump Game II
- [LeetCode]55.Jump Game
- LeetCode 55.Jump Game
- LeetCode --- 55. Jump Game
- [Leetcode] 55. Jump Game
- [leetcode] 55.Jump Game
- 55. Jump Game
- 55. Jump Game
- [leetcode] 55.Jump Game
- *LeetCode 55. Jump Game
- LeetCode 55. Jump Game
- [leetcode] 55. Jump Game
- 55. Jump Game
- leetcode 55. Jump Game
- 55. Jump Game LeetCode
- 【LeetCode】55. Jump Game
- 55. Jump Game
- 自动化测试入门
- lightoj1018
- 第二次上机实验报告
- 聚类算法(一)
- 天梯赛抢红包与PAT judge
- 55. Jump Game
- 关联android studio与GitHub,以及上传第一个工程到GitHub
- dpm命令分析
- ajax学习笔记
- Android各种各样的drawable
- jQuery
- rgb图像平移 matlab程序
- 求根结点到每个叶子节点的逆序列【后序遍历非递归的应用】
- 立体几何图形正确作法问题