首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贪心算法问题-LeetCode 55、45(贪心算法跳跃问题

贪心算法问题:LeetCode #55 #45 1 编程题 【LeetCode #55】跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。...算法原理: 遍历整个nums数组,每次计算从i位置的最大可能到达的距离,然后依次更新这个最大值,如果最大值大于nums的大小nums.size(),那么就返回true, 否则返回false....这就是正常人取求解这个问题的思路,很容易想到的!...数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。...说明: 假设你总是可以到达数组的最后一个位置 算法原理: 由于题目中规定总能到达数组的最后一个位置,因此我们在遍历数组时每次都要去找最大的跳跃位置,只有到达了这个最远的边界end,我们才让step进行自加

1.4K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    算法题之跳跃游戏

    上期新建了一个专栏并发布了一道算法题,今天继续,今天给大家带来的题目名为“跳跃游戏”。题目如下: 给定一个非负整数数组,你最初位于数组的第一个位置。...数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。...但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。 实例2用一张图来表示一下: ? 这道题该如何解答呢?首先分析一下,数组中如果没有0的话一定能跳到最后一个位置。如图: ?...如果数组中存在0的情况下,要跳到最后必须满足以下条件,从0前边的某一个位置上开始跳跃一定能跳过这个0才可以。...可以看到上面的图都能满足:从0前边的某一个位置上开始跳跃一定能跳过这个0才可以。但是怎么将这句话转换为逻辑代码呢?规律是什么呢?假装思考10秒钟...... 思考中...... 发现了什么规律呢?

    69451

    贪心算法跳跃游戏

    可以看一下公众号左下角的「算法汇总」,「算法汇总」已经把题目顺序编排好了,这是全网最详细的刷题顺序了,方便录友们从头打卡学习,「算法汇总」会持续更新! ❞ 55....数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。...不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。 这个范围内,别管是怎么跳的,反正一定可以跳过来。 「那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!」...「贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点」。 局部最优推出全局最优,找不出反例,试试贪心! 如图: ?...没有个整体的贪心框架解决一些列问题,只能是接触各种类型的题目锻炼自己的贪心思维!

    57420

    ☆打卡算法☆LeetCode 55、跳跃游戏 算法解析

    一、题目 1、算法题目 “给定一个非负整数数组,数组中每个元素代表可以跳跃的长度,判断能否达到最后一个下标。” 题目链接: 来源:力扣(LeetCode) 链接:55....数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。...但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。 二、解题 1、思路分析 别想了,看到求最优解就用贪心算法。。。...对于任意一个位置x,它能跳跃到的位置为y,它能跳跃的最大长度为x+nums[x],这个值大于y,也就是x+nums[x]≥y....那么这么一来,就可以依次遍历数组中的每个位置,并且记录最远长度,如果它在最远长度范围内,就可以通过跳跃到达该位置。

    25630

    贪心算法跳跃游戏II

    ❝相对于贪心算法跳跃游戏难了不少,做好心里准备! 通知:一些录友基础比较薄弱,不知道从哪里开始刷题。...可以看一下公众号左下角的「算法汇总」,「算法汇总」已经把题目顺序编排好了,这是全网最详细的刷题顺序了,方便录友们从头打卡学习,「算法汇总」会持续更新!...数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。...思路 本题相对于贪心算法跳跃游戏还是难了不少。 但思路是相似的,还是要看最大覆盖范围。 本题要计算最小步数,那么就要想清楚什么时候步数才一定要加一呢?...总结 相信大家可以发现,这道题目相当于贪心算法跳跃游戏难了不止一点。 但代码又十分简单,贪心就是这么巧妙。

    51740

    经典贪心算法跳跃游戏

    我们之前的一篇文章说过常见的时间区间调度的贪心算法问题,我放到次条了。 说白了,贪心算法可以理解为一种特殊的动态规划问题,拥有一些更特殊的性质,可以进一步降低动态规划算法的时间复杂度。...那么这篇文章,就讲 LeetCode 上两道经典的贪心算法跳跃游戏 I 和跳跃游戏 II。...Jump Game I 跳跃游戏 I 是 LeetCode 第 55 题,难度是 Medium,但实际上是比较简单的,看题目: title1 不知道读者有没有发现,有关动态规划的问题,大多是让你求最值的...本算法的时间复杂度 O(N),空间复杂度 O(1),可以说是非常高效,动态规划都被吊起来打了。 至此,两道跳跃问题都使用贪心算法解决了。...使用贪心算法的实际应用还挺多,比如赫夫曼编码也是一个经典的贪心算法应用。更多时候运用贪心算法可能不是求最优解,而是求次优解以节约时间,比如经典的旅行商问题

    1.3K10

    ☆打卡算法☆LeetCode 45、跳跃游戏II 算法解析

    一、题目 1、算法题目 “给定一个非负整数数组,数组中每个元素代表可以跳跃的最大高度,使用最少的跳跃次数跳到数组最后一个位置。” 题目链接: 来源:力扣(LeetCode) 链接:45....数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。...示例 1: 输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。  ...示例 2: 输入: nums = [2,3,0,1,4] 输出: 2 二、解题 1、思路分析 这个题是典型的贪心算法,通过局部最优解得到全局最优解,可以使用反向查找出发位置,来找到最优解。...找到最后一步跳跃前所在的位置,继续贪心寻找倒数第二步跳跃前所有的位置,以此类推,知道数组的开始位置。

    29930

    有趣的算法(二)——跳跃表的分析

    有趣的算法(二)——跳跃表的分析 (原创内容,转载请注明来源,谢谢) 一、概述 最近在学习redis,其中说到当使用redis的sorted set类型时,如果数据量大,redis内部会使用跳跃表结合散列表的方式对数据进行存储...而由于sorted set的值按照score有序排序,因此跳跃表用于存储score和内容的对应关系。 二、理想跳跃表的存储 跳跃表是一种改进的链表,理想的跳跃表如下图: ?...四、类理想跳跃表 理想跳跃表对于查找来说实现完全的二分法,速度最快。但是,当元素插入、删除时,如果仍使用理想跳跃表,维护起来极其复杂。...因此,通常采用类理想跳跃表,即非理想情况下的最优,而又最利于元素的插入和删除。 观察理想跳跃表,发现高层元素的个数总是下一层元素的一半。...因此,数据量小的时候,不适合使用跳跃表,因为n很小的时候,O(1)和O(n)差距不大。当数据量大的时候,由于类理想跳跃表又接近于理想跳跃表,则可以很好的使用。

    905100

    算法】动态规划 ⑦ ( LeetCode 55. 跳跃游戏 | 算法分析 | 代码示例 )

    文章目录 一、跳跃游戏 二、算法分析 三、代码示例 一、跳跃游戏 ---- LeetCode 55....二、算法分析 ---- 给定一个一维数组 , 数组元素不能有负数 , 如 : {2, 2, 0 , 1} ; 开始时 , 处于 第 0 个元素 2 位置 , 则说明 最多可以向右跳 2 步 , 其可以跳...可以选择向右 跳 0 步 , 1 步 , 2 步 ; 选择跳 0 步 没有意义 ; 选择跳 1 步 到达 第 2 个元素 0 位置 , 永远无法到达终点 ; 选择跳 2 步 , 可以到达终点 ; 该问题可以使用...动态规划 算法 进行解决 ; ① 可行性 : 上述问题 , 最终问的是 可行性 , 也就是方案数 大于 0 即可 ; ② 方向性 : 一维数组元素都是大于等于 0 的 , 从左到右跳跃 , 有方向性...; ③ 一维数组 : 问题是基于一维数组的 , 是变换下标的问题 , 符合 坐标型动态规划 中的一维坐标动态规划 ; 三、代码示例 ---- 代码示例 : class Solution { public

    38010

    Js排序算法_js 排序算法

    一、概念 快速排序算法由 C. A. R. Hoare 在 1960 年提出。...它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。...数组的分解步骤如下图所示: 三、动图演示 四、算法分析 a. 复杂度: 快速排序的方法复杂度有时间复杂度和空间复杂度。...时间复杂度往往是决定一个算法优劣的最重要出发点,空间复杂度在当今的计算机上已经没有那么大的影响力了。...快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间 复杂度是O(n) ; 而整个快速排序算法的时间复杂度与划分的趟数有关。

    25.2K20

    面试算法题之跳跃游戏,“You Jump, I Jump”

    跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。...初始需要跳跃的步数为cnt=0,而最后一个元素4是我们需要到达的终点,可以不用考虑,从0开始。 元素0等于cnt,无法跨越过去,于是需要跳跃的步数加1,此时cnt=1。继续下一个元素2。...贪心思路 我们初始化边界end为 0,从头到尾开始遍历,每次记录下当前能跳跃到的最大位置,当遍历到边界下标时,将边界位置更新为最大位置maxPos,并且增加一次跳跃。...如果遍历到最后一位,则可能会多计算一次跳跃(在刚好跳跃到最后一个元素位置时)。...广度优先搜索 我们可以从start开始,将其加入到队列中,每次取队列头部元素,看能跳跃到的所有位置,如果能跳跃的位置中任意一个是0,那么就返回true。

    9410
    领券