下面是这两个题的解法:

参考博客:http://blog.csdn.net/loverooney/article/details/38455475

自己写的第一题(TLE):

 #include<iostream>
#include<vector> using namespace std; bool canJump(vector<int>& nums)
{
int L = nums.size();
bool *flag = new bool[L];
for (int i = L - ; i >= ; i--)
{
int right = i + nums[i];
if (right >= L - )
flag[i] = true;
else
{
flag[i] = false;
for (int j = i + ;j<L&& j < i + nums[i]; j++)
{
if (flag[j] == true)
{
flag[i] = true;
break;
}
}
}
}
return flag[];
} int main()
{
vector<int> a = { , , , , };
cout << canJump(a) << endl;
}

贪心用step维护当前可到达的最远位置,每次的i必须在这个最远位置以内,假如不在就表明不能前进了return false。

代码:

 #include<iostream>
#include<vector> using namespace std; bool canJump(vector<int>& nums)
{
int L = nums.size();
int step = ;
for (int i = ; i <= step; i++)
{
if (nums[i] + i > step)
step = nums[i] + i;
if (step >= L - )
return true;
}
return false;
} int main()
{
int a[] = { , , , , };
cout << canJump(vector<int>(a, a+)) << endl;
}

第二题:

BFS解法(MLE):

 #include<vector>
#include<iostream>
#include<queue> using namespace std; typedef struct Node
{
int index;
int jumpNo;
Node(int index, int jumpNo) :index(index), jumpNo(jumpNo){};
}Node; // BFS
int jump(vector<int>& nums)
{
int i = ;
int L = nums.size();
queue<Node> que;
que.push(Node(i,));
while (!que.empty())
{
Node now = que.front();
que.pop();
for (i = now.index + ; i <= nums[now.index] + now.index; i++)
{
if (nums[i]+now.index >= L - )
{
return now.jumpNo+;
}
else
que.push(Node(i,now.jumpNo+));
}
}
return -;
} int main()
{
vector<int> a = { , , , , };
cout << jump(a) << endl;
}

自己写的也是MLE:

 #include<iostream>
#include<vector>
#include<queue> using namespace std; typedef struct Node
{
int val; //从该节点能调到哪儿
int len; //该节点在第len跳被访问
int index; //当前节点的下标
Node(int val,int index, int len) :val(val), index(index),len(len){};
Node(){};
}Node; int jump(vector<int>& nums)
{
int L = nums.size();
Node* nodeArray = new Node[L];
for (int i = ; i < L; i++)
{
nodeArray[i].val = nums[i];
nodeArray[i].index = i;
nodeArray[i].len = ;
}
//vector<bool> visited(L,false);
queue<Node> visiteQueue;
nodeArray[].len = ;
visiteQueue.push(nodeArray[]);
while (!visiteQueue.empty())
{
Node temp = visiteQueue.front();
int index = temp.index;
int canStep = temp.val;
for (int i = index + ; i <= index + canStep; i++)
{
if (nodeArray[i].index+nodeArray[i].val>=L-)
{
return temp.len + ;
}
Node nextNode(nodeArray[i].val,nodeArray[i].index, temp.len + );
visiteQueue.push(nextNode);
}
visiteQueue.pop();
}
return false;
} int main()
{
vector<int> a = { ,,, , , ,,,,};
cout << jump(a) << endl;
}

内存不超的BFS:http://www.myext.cn/c/a_4468.html

动态规划解法(TLE):

 #include<iostream>
#include<vector> using namespace std; int jump(vector<int>& nums)
{
int L = nums.size();
int *dp = new int[L];
dp[] = ;
for (int i = ; i < L; i++)
{
int min = INT_MAX;
for (int j = ; j < i; j++)
{
if (nums[j] + j >= i&&dp[j]+<min)
{
min = dp[j] + ;
}
}
dp[i] = min;
}
for (int i = ; i < L; i++)
cout << dp[i] << endl;
return dp[L - ];
} int main()
{
vector<int> a = { , , , , };
cout << jump(a) << endl;
}

贪心解法:

最新文章

  1. 使用AsyncTask实现文件下载并且在状态中显示下载进度
  2. socketserver模块写的一个简单ftp程序
  3. easyui datagrid将表头的checkbox不显示(隐藏)
  4. tomcat配置和优化
  5. eclipse 左边目录结构下五referenced library解决办法
  6. Longest Substring with At Most K Distinct Characters
  7. Spring面试问题
  8. phpcms站---去除域名绑定目录中的HTML
  9. web框架--来自维基百科
  10. while read line无法循环read文件
  11. MySQL分支Percona,折腾中,先科普一下
  12. Windows 小端存储
  13. 异步获取CMD命令行输出内容
  14. 数据加密,android客户端和服务器端可共用
  15. ●BZOJ 3143 [Hnoi2013]游走
  16. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十七)
  17. METO CODE 223 拉力赛
  18. asp.net webapi中helppage
  19. scrapy框架使用笔记
  20. 可以用py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)来代替pyuserinput

热门文章

  1. C#面向对象(一):明确几个简单的概念作为开胃菜
  2. Balanced Lineup(线段树的简单了解)
  3. LeetCode Image Smoother
  4. poj1463 Strategic game[树形DP]
  5. bzoj 3887: Grass Cownoisseur Tarjan+Topusort
  6. npm install -d
  7. git公钥生成以及与coding等联合
  8. mysql 查找表的auto_increment和修改
  9. Nginx解决错误413 Request Entity Too Large
  10. 机器学习:PCA(基础理解、降维理解)