给定一个非负整数数组,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个位置。

示例 1:

输入: [2,3,1,1,4]

输出: true

解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

示例 2:

输入:* [3,2,1,0,4]

输出: false

解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

思路:

方法一:

维护一个最右能到达的距离rightmost,然后从0开始依次遍历数组,对于第i个位置,它能到达的最右位置为i+nums[i],与维护的rightmost比较,如果大于rightmost则更新rightmost,如果rightmost已经大于等于nums.size()-1,那么则成功。因为i时递增的,如果发现rightmost小于i了,说明不可到达,此时返回false。

class Solution {

public:

bool canJump(vector& nums) {

int rightmost=0;

for(int i=0;i

{

if(i>rightmost) //存在到达不了的位置

return false;

rightmost=max(rightmost,i+nums[i]); //更新rightmost

if(rightmost>=nums.size()-1) //提前结束,之后的元素就不用遍历了

return true;

}

return true;

}

};

方法二:

发现只有数组中存在0的时候,才有可能无法到达最后一个元素。如果全不是0,则肯定可以到达最后元素。于是可以对0出现的位置做分类讨论。

如果nums[0]=0,则说明不能跳跃,此时数组只有0一个元素则成功,否则失败。

对于一般情况,比如num[i]=0,那么只要在i之前存在一个元素j,使得num[j]>i-j即可跳过该0。

如果最后一个元素为0,若存在j,使得num[j]>=nums.size()-1 - j即可跳跃成功,取等于也可以的原因是到达最后一个位置就不需要再跳了。如果一般情况取等于号则不可以,因为还需要再跳,但是不能跳了。

class Solution {

public:

bool canJump(vector& nums) {

if (nums[0]==0)

{

if (nums.size()==1)

return true;

else

return false;

}

bool flag=1; //标记nums[i]=0时是否成功跳过

for(int i=0;i

{

if(nums[i]==0){

flag=0; //nums[i]=0,触发条件flag=0

for(int j=i-1;j>=0;--j)

{

if((i!=nums.size()-1&&nums[j]>i-j)||(i==nums.size()-1&&nums[j]>=(i-j)))

{

flag=1; //如果flag=1,说明nums[i]可以由i之前的元素跳过去

break; //跳出当前循环,即j元素已经能满足,不需要再往前找了。

}

}

if(!flag) //此时flag为0,说明nums[i]不能由i之前的元素顺利跳过,直接返回false

return false;

}

}

return flag;

}

};

自己果然是个经验宝宝。。。。

那就多看看题解,加油吧。。。

leetcode跳跃游戏C语言,LeetCode:跳跃游戏相关推荐

  1. C语言数组制作拼图游戏,C语言自制拼图游戏.doc

    C语言自制拼图游戏 C语言~~自制-拼图游戏 原帖及讨论:/thread-233257-1-1.html //编译环境VC++6.0. 程序和资源一共15M. 来自 //需要的留个EMAIL.... ...

  2. c语言案例游戏,C语言实现五子棋游戏的案例

    C语言实现五子棋游戏的案例 发布时间:2020-08-25 09:35:55 来源:亿速云 阅读:120 作者:小新 小编给大家分享一下C语言实现五子棋游戏的案例,相信大部分人都还不怎么了解,因此分享 ...

  3. c语言经典游戏,C语言——经典小游戏——打砖块

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言--经典小游戏--打砖块 玩法:按A与D控制球拍的移动,按S暂停游戏 百度网盘下载:http://pan.baidu.com/s/1o64ECTc ...

  4. c语言设计生命游戏,C语言实现生命游戏.doc

    C语言实现生命游戏 本世纪70年代,人们曾疯魔一种被称作"生命游戏"的小游戏,这种游戏相当简单.假设有一个像棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:&q ...

  5. 可乐瓶游戏c语言,小班体育游戏《玩可乐瓶》教案

    小班体育游戏<玩可乐瓶>教案 目标: 1.在老师的引导下,探索可乐瓶的'玩法,发展幼儿的动作. 2.乐意在自然环境中进行锻炼,并知道爱护环境. 过程: 一.激发兴趣,活动身体天亮了,起床了 ...

  6. java三子棋人机游戏_C语言编程入门游戏《三子棋》

    经过C语言初级阶段的系统学习,对基本C语言的知识有了一定的了解和认识,能够通过C语言编程解决一些简单的问题.本次完成一个简单的游戏<三子棋>. 游戏简介:常见的3x3棋盘,有两名游戏玩家, ...

  7. 与猜数问题有关的游戏C语言,猜数字游戏(C语言版)

    最近在研究算法的问题 貌似这是工作中的一个短板 当然 这跟我从事的工作有关 一般不容易接触太多算法问题 .很多时候接触都是一些CRUD  ! 今天空闲了会 写了一个猜数字的游戏  原理很简单 直接上代 ...

  8. leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现

    leetcode explore 初级算法第三题,旋转数组代码实现.原题链接: 题目分析 因为题目不是很长,这里把题目贴出来: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. ...

  9. 数字炸弹游戏c语言,数字炸弹游戏作文500字

    今天,我们玩了一个超好玩的游子,叫"数字炸弹". 游戏规则:出题的人从1-100选一个数字,假如出题的人写82,其他7人中的一人选了82,那个人喝一杯满满的水,如果没人选82,那出 ...

最新文章

  1. 2015-01-27
  2. 卡萨帝:用发明去超越历史!15年走完百年路
  3. 简单来说一下java中的泛型,ssh中dao层使用会简化代码量
  4. |(与或移位等)的工程运用
  5. 计算机管理术语路径描述的是,directory
  6. 软件:推荐七款Windows下宝藏软件,值得收藏!
  7. [mybatis]Configuration XML_mappers
  8. python3.8爬虫_python爬虫系列(3.8-正则的使用)
  9. “通信大数据”征文通知
  10. JVM学习-字节码指令
  11. 实现第一个JDBC程序(详细)
  12. c++ opencv mat_实战 | OpenCV 实现多张图像拼接
  13. ubuntu本地虚拟机搭建服务器,window配合虚拟机VMware搭建虚拟ubuntu服务器入坑集锦...
  14. 设计模式在项目中的应用案例_案例|P6软件在水电项目施工管理中的应用
  15. Oracle Lob介绍
  16. 实现一个多线程安全的单向有序链表,add单个结点、与其他链表合并
  17. 【学习笔记】C++STL和泛型编程-侯捷
  18. 3d打印技术改变生活的影响
  19. 美股投资指南 – 网上美股开户其实很简单
  20. parameter server学习

热门文章

  1. 计算机在职考研一月联考院校,在职研究生一月联考的分数线是多少?
  2. java中的字段是_Java – 获取类中特定数据类型的字段
  3. oracle tns 代理配置_oracle数据库tns配置方法详解
  4. Thrift入门及Java实例演示
  5. 网页中设定表格边框的厚度的属性_网页试题
  6. 计算机解译地学应用效果,不同的遥感解译方法在地表覆盖分类信息提取中的应用研究...
  7. java poi 需要jar_Java 之 POI各Jar包作用
  8. python自动化办公知识点整理汇总_Python自动化办公知识点整理汇总
  9. mysql版本 hibernate_Mysql 不同版本 说明
  10. Java学习笔记_方法