leecode 解题总结:55. Jump Game
来源:互联网 发布:linux pe结构 编辑:程序博客网 时间:2024/05/17 07:27
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
/*
问题:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
分析:
这个是贪心算法。可以设定[colBegin ,colEnd]范围内的最大可跳出距离maxFur = max(maxFur, A[i] + i),
一旦抵达colEnd,触发跳跃此时更新colEnd = maxFur,如果发现最终maxFur < A.length - 1,则说明不可跳跃
证明:如果colEnd处触发跳跃都不能成功,那么在colEnd前面的任意一处跳跃也不能成功。
如果不是在colEnd处触发跳跃,则跳跃位置pos < colEnd,由于最大在小于下标colEnd的元素中最大跳跃距离<=maxFur
则选择其他处跳跃到maxFur的次数>=1,比从colEnd
输入:
5
2 3 1 1 4
5
3 2 1 0 4
3
0 2 3
输出:
true
false
false
关键:
1
//注意最后一个元素不能取到,因为是从其他元素跳跃到最后一个元素,而不是从最后一个元素跳跃到本身
int jumps = 0;
for(int i = 0 ; i < size - 1 ; i++)
{
maxFur = max(maxFur , nums.at(i) + i);
//到达当前所能到达的最远距离,只需要一次,累加跳跃次数
if(i == colEnd)
{
jumps++;
colEnd = maxFur;//更新下一次所能到达最远距离
}
}
//如果最后的最远距离小于 nums.size() - 1说明不可到达
//colEnd起始代表了最终可以到达的距离
if(colEnd < size - 1)
{
return false;
}
*/
class Solution {
public:
bool canJump(vector<int>& nums) {
//数组元素为空,返回flase
if(nums.empty())
{
return false;
}
int colEnd = 0;
int maxFur = 0;
int size = nums.size();
//注意最后一个元素不能取到,因为是从其他元素跳跃到最后一个元素,而不是从最后一个元素跳跃到本身
int jumps = 0;
for(int i = 0 ; i < size - 1 ; i++)
{
maxFur = max(maxFur , nums.at(i) + i);
//到达当前所能到达的最远距离,只需要一次,累加跳跃次数
if(i == colEnd)
{
jumps++;
colEnd = maxFur;//更新下一次所能到达最远距离
}
}
//如果最后的最远距离小于 nums.size() - 1说明不可到达
//colEnd起始代表了最终可以到达的距离
if(colEnd < size - 1)
{
return false;
}
else
{
return true;
}
}
};
void print(vector<int>& result)
{
if(result.empty())
{
cout << "no result" << endl;
return;
}
int size = result.size();
for(int i = 0 ; i < size ; i++)
{
cout << result.at(i) << " " ;
}
cout << endl;
}
void process()
{
vector<int> nums;
int value;
int num;
Solution solution;
vector<int> result;
while(cin >> num )
{
nums.clear();
for(int i = 0 ; i < num ; i++)
{
cin >> value;
nums.push_back(value);
}
bool isOk = solution.canJump(nums);
if(isOk)
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
}
int main(int argc , char* argv[])
{
process();
getchar();
return 0;
}
#include <stdio.h>
#include <vector>
using namespace std;
/*
问题:
Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.
For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
分析:
这个是贪心算法。可以设定[colBegin ,colEnd]范围内的最大可跳出距离maxFur = max(maxFur, A[i] + i),
一旦抵达colEnd,触发跳跃此时更新colEnd = maxFur,如果发现最终maxFur < A.length - 1,则说明不可跳跃
证明:如果colEnd处触发跳跃都不能成功,那么在colEnd前面的任意一处跳跃也不能成功。
如果不是在colEnd处触发跳跃,则跳跃位置pos < colEnd,由于最大在小于下标colEnd的元素中最大跳跃距离<=maxFur
则选择其他处跳跃到maxFur的次数>=1,比从colEnd
输入:
5
2 3 1 1 4
5
3 2 1 0 4
3
0 2 3
输出:
true
false
false
关键:
1
//注意最后一个元素不能取到,因为是从其他元素跳跃到最后一个元素,而不是从最后一个元素跳跃到本身
int jumps = 0;
for(int i = 0 ; i < size - 1 ; i++)
{
maxFur = max(maxFur , nums.at(i) + i);
//到达当前所能到达的最远距离,只需要一次,累加跳跃次数
if(i == colEnd)
{
jumps++;
colEnd = maxFur;//更新下一次所能到达最远距离
}
}
//如果最后的最远距离小于 nums.size() - 1说明不可到达
//colEnd起始代表了最终可以到达的距离
if(colEnd < size - 1)
{
return false;
}
*/
class Solution {
public:
bool canJump(vector<int>& nums) {
//数组元素为空,返回flase
if(nums.empty())
{
return false;
}
int colEnd = 0;
int maxFur = 0;
int size = nums.size();
//注意最后一个元素不能取到,因为是从其他元素跳跃到最后一个元素,而不是从最后一个元素跳跃到本身
int jumps = 0;
for(int i = 0 ; i < size - 1 ; i++)
{
maxFur = max(maxFur , nums.at(i) + i);
//到达当前所能到达的最远距离,只需要一次,累加跳跃次数
if(i == colEnd)
{
jumps++;
colEnd = maxFur;//更新下一次所能到达最远距离
}
}
//如果最后的最远距离小于 nums.size() - 1说明不可到达
//colEnd起始代表了最终可以到达的距离
if(colEnd < size - 1)
{
return false;
}
else
{
return true;
}
}
};
void print(vector<int>& result)
{
if(result.empty())
{
cout << "no result" << endl;
return;
}
int size = result.size();
for(int i = 0 ; i < size ; i++)
{
cout << result.at(i) << " " ;
}
cout << endl;
}
void process()
{
vector<int> nums;
int value;
int num;
Solution solution;
vector<int> result;
while(cin >> num )
{
nums.clear();
for(int i = 0 ; i < num ; i++)
{
cin >> value;
nums.push_back(value);
}
bool isOk = solution.canJump(nums);
if(isOk)
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
}
int main(int argc , char* argv[])
{
process();
getchar();
return 0;
}
0 0
- leecode 解题总结:55. Jump Game
- leecode 解题总结:45. Jump Game II
- Leecode OJ Jump Game
- leecode 解题总结:292. Nim Game
- 55. Jump Game解题报告
- [leetcode] 55. Jump Game 解题报告
- LeetCode解题报告 55. Jump Game [medium]
- [Leetcode] 55. Jump Game 解题报告
- LeetCode 55. Jump Game 解题报告
- Leetcode Jump Game 解题报告
- 【LeetCode】Jump Game 解题报告
- [LeetCode] Jump Game 解题报告
- leetcode解题之45. Jump Game II&55. Jump Game java (跳跃游戏)
- leetCode 55.Jump Game(跳跃游戏) 解题思路和方法
- Leetcode #55. Jump Game 跳跃游戏 解题报告
- leecode 解题总结:46. Permutations
- leecode 解题总结:77. Combinations
- leecode 解题总结:78. Subsets
- STM32F10X的USB固件库说明
- JAVA 比较两张图片的相似度的代码
- 项目里使用MVP和Dagger的有福了!!!绝对提升效率
- 上到99,下到刚会打篮球,请学习下面的Java
- 手动加载spring, ApplicationContext怎么销毁
- leecode 解题总结:55. Jump Game
- 设计模式之——观察者模式(二)
- 2017.2.09【初中部 提高组】模拟赛C组 汉诺塔 题解
- 希望最美
- Linux中的几个实用技巧
- poj3687——Labeling Balls(拓扑排序)
- android 博客大牛地址收藏
- 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
- 深入理解java三种开发模式