博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode56:Jump Game
阅读量:7283 次
发布时间:2019-06-30

本文共 1939 字,大约阅读时间需要 6 分钟。

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. Array Greedy

解法一

最開始考虑的是用递归求解,对于A=[2,3,1,1,4]这个数组,能够

从头開始遍历,假设对于上面的第一个元素2,能够前进两步,然后分别求两个数组A1=[3,1,1,4]和A2=[1,1,4]的结果,例如以下图:这样的方法能够求解出结果,可是从图中不难看出会有大量的反复,结果在leetCode中也显示超时
这里写图片描写叙述
还是将代码列出:

class Solution {public:    bool canJump(vector
& nums) { int result=0; canJumpChild(nums,0,result); return result; } void canJumpChild(vector
& nums,int offset,int &result) { if(result==1) return ; if(offset==(nums.size()-1)) { result=1; return ; } vector
::iterator iter=nums.begin()+offset; for(int i=1;i<=*iter;i++) canJumpChild(nums,offset+i,result); }};

然后看到了leetcode的提示greedy,就是说能够用贪婪算法来求解这个问题。发现这是一道很easy的用贪婪发就能够求解的,以下解法二和解法三都是这个思路。

解法二

贪婪策略依据还能向前移动的步长来推断,从第二个元素開始循环,假设能移动的步长小于等于0。表示无法到达这一步,就返回false。否则依据当前索引处的值来更新能移动的步长。代码例如以下:

class Solution {

public:

bool canJump(vector
& nums) { //remain_step记录剩下的步数。表示最多能向前移动几步 int remain_step = nums.front(); //i能够理解成是否能到达的下标处。注意是从下标为1的位置開始,假设循环到数组的末端还能向前移动表示能到达末端 for(int i = 1; i

}

};

解法三

贪婪策略是能到达的最远处,每次到达一个下标处后就更新能到达的最远处的值。

class Solution {public:     bool canJump(vector
& nums) { int max_jump=0;//max_jump表示能到达的最远的地方的下标。初始在0处 //跳出循环的条件是已经走到了最远处 for(int i=0;i<=max_jump;i++)//max_jump表示能到达的最远位置的下标 { //假设能到达的最远位置的下标大于等于nums.size()-1。表示能到达末尾 if(max_jump>=nums.size()-1) return true; if(i+nums[i]>max_jump) max_jump=i+nums[i];//更新能到达的最远的地方 } return false; }};
你可能感兴趣的文章
Codeforces Beta Round #9 (Div. 2 Only) B. Running Student 水题
查看>>
Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)
查看>>
PHPer书单
查看>>
沉浸式导航栏
查看>>
Python中docstring文档的写法
查看>>
SSH配置文件和SSM配置文件的写法
查看>>
EF架构随心所欲打造属于你自己的DbModel【转】
查看>>
caffe中关于数据进行预处理的方式
查看>>
Jquery之ShowLoading遮罩组件
查看>>
C#扩展方法
查看>>
Java Synchronized的用法
查看>>
Callable接口、Runable接口、Future接口
查看>>
单片机中断的IE和IP寄存器(摘抄)
查看>>
Javascript题库
查看>>
写正则不要再瞎转义了
查看>>
自动复制转换StringBuffer
查看>>
【linux】linux shell 日期格式化
查看>>
带你玩转Logview: MaxCompute Logview参数详解和问题排查
查看>>
探讨:通过循环数组或者集合,插入数据库中没有的数据
查看>>
Spring @Value的$和#用法区别
查看>>