canJump&&jumpII
2015-11-10 16:20
381 查看
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool canJump(int a[], int n)
{<
4000
br />int reach = 1;
for (int i = 0;i < reach&&reach < n;++i)
{
reach = max(reach, i + 1 + a[i]);
}
return reach >= n;
}
bool canJump1(int a[], int n)
{
if (n == 0)
return true;
int left_most = n - 1;
for (int i = n - 2;i >= 0;--i)
if (i + a[i] >= left_most)
left_most = i;
return left_most == 0;
}
bool canJump2(int a[], int n)
{
vector<int>f(n, 0);
f[0] = 0;
for (int i = 1;i < n;++i)
{
f[i] = max(f[i - 1], a[i - 1])-1;
if (f[i] < 0)
return false;
}
return f[n - 1] >= 0;
}
int jump(int A[], int n)
{
int left = 0;
int right = 0;
int step = 0;
if (n == 1)
return 0;
while (left <= right)
{
++step;
int old_right = right;
for (int i = left;i <=old_right;++i)
{
if (i + A[i] >= n - 1)
return step;
if (i + A[i]>right)
right = i + A[i];
}
left = old_right + 1;
}
}
int main()
{
int a[] = { 2,3,1,1,4 };
int n = sizeof(a) / sizeof(int);
int b[] = { 3,2,1,0,4 };
int m = sizeof(b) / sizeof(int);
cout << canJump2(a, n) << endl;
cout << canJump2(b, m) << endl;
cout << jump(a, n) << endl;
}
#include<algorithm>
#include<vector>
using namespace std;
bool canJump(int a[], int n)
{<
4000
br />int reach = 1;
for (int i = 0;i < reach&&reach < n;++i)
{
reach = max(reach, i + 1 + a[i]);
}
return reach >= n;
}
bool canJump1(int a[], int n)
{
if (n == 0)
return true;
int left_most = n - 1;
for (int i = n - 2;i >= 0;--i)
if (i + a[i] >= left_most)
left_most = i;
return left_most == 0;
}
bool canJump2(int a[], int n)
{
vector<int>f(n, 0);
f[0] = 0;
for (int i = 1;i < n;++i)
{
f[i] = max(f[i - 1], a[i - 1])-1;
if (f[i] < 0)
return false;
}
return f[n - 1] >= 0;
}
int jump(int A[], int n)
{
int left = 0;
int right = 0;
int step = 0;
if (n == 1)
return 0;
while (left <= right)
{
++step;
int old_right = right;
for (int i = left;i <=old_right;++i)
{
if (i + A[i] >= n - 1)
return step;
if (i + A[i]>right)
right = i + A[i];
}
left = old_right + 1;
}
}
int main()
{
int a[] = { 2,3,1,1,4 };
int n = sizeof(a) / sizeof(int);
int b[] = { 3,2,1,0,4 };
int m = sizeof(b) / sizeof(int);
cout << canJump2(a, n) << endl;
cout << canJump2(b, m) << endl;
cout << jump(a, n) << endl;
}
相关文章推荐
- Android 性能调优的技术点
- border在IE6设置transparent无效
- jQuery.extend 函数详解
- "_OBJC_CLASS_$ [文件名1]referenced from in[文件名2]:ld: symbol(s) not found问题解决办法
- 架构设计最佳实践与必备素养
- Microsoft Visual Studio TFS 切换登录用户的方法
- Windows Server 2008 R2 SP1安装SQL 2012安装报错之0x858C001B
- MVC中return File(byte[],"image/jpeg")输入图片不清晰
- 短信验证
- [国嵌攻略][052][NandFlash驱动设计_读]
- Java通过httpclient获取cookie模拟登录
- JasperReport学习笔记6-JRXML的标签
- Apache Karaf自定义feature
- delphi2010 域名转换IP
- 输出两个数中的最大值(函数)
- LeetCodeOJ_223_Rectangle Area
- MPI并行编程基础小结(window下搭建MPI环境,vs配置mpi)
- NAND FLASH读写原理
- TinyFox/Jexus如何正确使用配置文件
- CXF集成spring做webservice接口