【leetcode】Jump Game II
来源:互联网 发布:网络摄像机怎么看回放 编辑:程序博客网 时间:2024/04/29 18:26
【leetcode】Jump Game II
恩……没看tips之前,我看了题目就觉得是DP,和《算法导论》上的切钢条几乎没什么两样。
状态转移方程
|-> 0 (i=the last position)
m[i]= |-> 1 (i+jump distance >= the last position)
|-> min(m[i+1],m[i+2],...,m[i+jump distance])
class Solution { public: int jump(vector<int>& nums) {int vSize=nums.size();if(vSize<=1) return 1;int *res;res=new int[vSize];memset(res,0,vSize*sizeof(int));res[vSize-1]=0;res[vSize-2]=1;for(int i=vSize-3;i>=0;--i){ if(nums[i]+i>=vSize-1)res[i]=1; else {int min=0x7fffffff;for(int j=1;j<=nums[j];++j) if(min>res[i+j])min=res[i+j];res[i]=min+1; }}return res[0]; }};
Time Limit Exceeded...倒霉。想想用DP做的,还带备忘录的,不用递归,怎么就超时了呢……某些DP可用GREEDY来做。我想了想(没有严谨推导……),如何贪心才对呢?哦~在当前位置可跳的范围内,找到下一次可跳最远位置,这就是正确的贪心选择。
class Solution { public: int jump(vector<int>& nums) {int vSize=nums.size();if(vSize<=1) return 0;int res=0,now_pos=0,far_pos=0;while(now_pos+nums[now_pos]<vSize-1){ int tmp=0; for(int i=1;i<=nums[now_pos];++i)if(far_pos<nums[i+now_pos]+i+now_pos){ tmp=i+now_pos; far_pos=nums[i+now_pos]+i+now_pos;} res+=1; now_pos=tmp;//cout<<now_pos<<' '; far_pos=0;} ++res;return res; }};
0 0
- LeetCode: Jump Game II
- LeetCode Jump Game II
- LeetCode: Jump Game II
- [Leetcode] Jump Game II
- [LeetCode] Jump Game II
- [Leetcode] Jump Game ii
- leetcode Jump Game II
- leetcode Jump Game II
- [LeetCode]Jump Game II
- [leetcode]Jump Game II
- LeetCode-Jump Game II
- [leetcode] Jump Game II
- LeetCode - Jump Game II
- LeetCode:Jump Game II
- LeetCode | Jump Game II
- 【Leetcode】Jump Game II
- LeetCode Jump Game II
- [LeetCode] Jump Game II
- struts if 标签判断单个字母
- 解释型语言与编译型语言
- Java 8新特性探究(五)Base64详解
- Android开发--CardView使用
- unicode的CString转
- 【leetcode】Jump Game II
- WideCharToMultiByte和MultiByteToWideChar函数的用法
- 吹泡泡之路(2015.4.26)
- Ext JS 6 驾临
- 老鼠喝毒水问题
- 第二章 归并排序之C++实现
- 云服务下的安全特点及基础防护
- 字符串逆序
- C#利用接口实现窗体间函数调用