跳跃游戏(C)

  • 1. 题目描述
  • 2. 题目分析
  • 3. C语言实现
    • 3.1 零点跳跃法
    • 3.2 贪心算法

1. 题目描述

难度:中等

2. 题目分析

这道题很有意思,我们需要知道的有这么几点:

  • 如果输入的数组每一位都是大于0的数,那么肯定能跳到最后的位置(比如每个位置就向前跳1)
  • 如果数组中出现0,那么除非该元素之前有能跳过这个零点的元素,否则无论如何也到不了最后一个

所以实现的方法有两种:

  • 零点跳跃法
    根据以上两条题目分析,对数组进行判断,如果所有元素都是大于0的数,那么返回TURE。如果出现0,那就判断前面是否有元素可以跨过这个0元素,如果不能,就返回false。时间复杂度最好的情况是O(n),最坏情况是O(n^2)
  • 贪心算法
    从左到右遍历数组,计算每一步所能到达的最大距离,并更新最大距离值。比较最大的距离和遍历的下标,如果下标始终小于等于最大距离,那么就能走到末尾,否则不可以。时间复杂度为O(n)

3. C语言实现

3.1 零点跳跃法

代码如下:

// 判断是否有元素能跳过零点,如果不能返回0
bool jugde(int* nums, int index){int i;for(i = index-1; i >= 0; i--){if(nums[i]>(index-i)){return 1;}}return 0;
}
bool canJump(int* nums, int numsSize){int i;// 如果数组长度为1,直接返回1if(numsSize == 1) return 1;// 如果数组为空,返回0if(nums[0] == 0)  return 0;for(i = 0; i < numsSize; i++){// 判断是否有0元素,并且不再数组末尾if(nums[i] == 0 && i != numsSize-1){if(jugde(nums, i)==0)return 0;}}return 1;
}

运行结果为:

3.2 贪心算法

代码如下:

bool canJump(int* nums, int numsSize){int k = 0;for (int i = 0; i < numsSize; i++){if(i > k) return false;k = k>(i + nums[i])?k:(i + nums[i]);}return true;
}

LeetCode--55.跳跃游戏(贪心,零点跳跃)相关推荐

  1. LeetCode55跳跃游戏//力扣55跳跃游戏(贪心)

    LeetCode55跳跃游戏//力扣55跳跃游戏(贪心) 来源:力扣(LeetCode) 链接:题目跳转 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该 ...

  2. _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II

    _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...

  3. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II

    LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...

  4. 力扣记录:贪心算法3较难(1)区间问题——55 跳跃游戏,45 跳跃游戏II,452 用最少数量的箭引爆气球,435 无重叠区间,763 划分字母区间,56 合并区间

    本次题目 55 跳跃游戏 45 跳跃游戏II 452 用最少数量的箭引爆气球 435 无重叠区间 763 划分字母区间 56 合并区间 55 跳跃游戏 局部最优:不管每次跳多少步,取最大跳跃步数,若覆 ...

  5. LeetCode--45. 跳跃游戏Ⅱ(贪心)

    跳跃游戏Ⅱ(C) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 最大跨越点算法 3.2 贪心算法 1. 题目描述 难度:困难 2. 题目分析 该题目是LeetCode55.跳跃算法的进阶版 ...

  6. 161. Leetcode 55. 跳跃游戏 (贪心算法-贪心区间)

    class Solution:def canJump(self, nums: List[int]) -> bool:if len(nums) == 1:return Truecover = 0i ...

  7. [Leedcode][JAVA][第55题][跳跃游戏][贪心][动态规划]

    [问题描述] 给定一个非负整数数组,你最初位于数组的第一个位置.数组中的每个元素代表你在该位置可以跳跃的最大长度.判断你是否能够到达最后一个位置.示例 1:输入: [2,3,1,1,4] 输出: tr ...

  8. 跳跃游戏(数组下标跳跃)

    给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如:A = [2,3,1,1,4]A=[2 ...

  9. 跳跃游戏 (贪心/动态规划/dfs)

    1.跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr[],从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到 ...

最新文章

  1. Windows Server 2012 RDS系列:虚拟桌面化(5)
  2. 22.网络提速(最短路)
  3. IPv6的利与弊—Vecloud微云
  4. 我治大学生抄作业毛病的办法——兼答丁又专老师
  5. 艾地计算机软件,多媒体技术原理与应用.pdf
  6. 第三次学JAVA再学不好就吃翔(part23)--private和this
  7. 我们为何要使用多线程,它有什么优点?
  8. 室内声场计算机模拟的声线跟踪法和虚声源法,基于声线跟踪法的室外声场仿真.doc...
  9. C++模板元编程---折叠表达式
  10. 身份证号第18位的计算
  11. 智能推荐系统开发中的十大要素
  12. Beautiful Soup4.2文档
  13. 使用beeline/hive时,该如何停止打印INFO日志
  14. 剪不断,理还乱——UML的四种关系
  15. 实现输入月份号输出对应的英文月份
  16. andriod写计时器
  17. 破解Wi-Fi -- Python
  18. 钉钉应用开发,提示Warning: Invalid CERT Authority
  19. ntp实现多台服务器时间同步[实测]
  20. 树莓派python3的opencv下载(编译失败第六步必看)

热门文章

  1. 系统无法执行指定的程序。_使用Rust编写操作系统(一):独立式可执行程序
  2. Oracle从零开始5——数据库定义操作
  3. 人受失败后多久可以做第二次_做完皮秒多久可以用自己的护肤产品、过来人分享皮秒后怎么护肤?...
  4. Java基础---分支结构(if--else / switch---case)
  5. 模板语法-插入文本//模板语法-插入标签//模板语法-双花括号//模板语法-向标签属性中插入数据
  6. Win32中常用消息
  7. [Objective-C语言教程]数据封装(27)
  8. set和muliset
  9. split出现得问题
  10. 《机器学习实战》程序清单3-4 创建树的函数代码