【面试经典150 | 数组】跳跃游戏

news/2024/7/23 23:48:34 标签: 贪心, 数组, C++, 算法

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

贪心】【数组


题目来源

面试经典150题 | 55. 跳跃游戏


题目解读

给你一个下标从 0 开始的数组 numsnums[i] 表示你可以从 i 位置跳跃的最大长度。现在你从数组下标为 0 的位置出发,判断是否可以到达数组的最后一个位置,如果可以,返回 true;否则,返回 false


解题思路

方法一:贪心

我们从数组下标为 0 的位置出发,如果最后可以到达数组的最后一个位置,那么我们返回 true,否则返回 false。因此需要维护一个变量 maxIdx 表示可以到达的最大位置,如果在某个数组下标位置处有 maxIdx >= n- 1,则表示可以到达数组的最后位置,其中, n n n数组 nums 的长度。并且,我们在遍历数组的时候,如果当前位置在某一次的最大可到达位置内即 i <= maxIdx,我们要更新 maxIdx = max(maxIdx, i + nums[i])

实现代码

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int n = nums.size();
        int maxIdx = 0;  // 可以跳到最远的地方
        for (int i = 0; i < n; ++i) {
            if (i <= maxIdx) {
                maxIdx = max(maxIdx, i + nums[i]);
            }
            if (maxIdx >= n-1) {
                return true;
            }
        }
        return false;
    }
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n数组 nums 的长度。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。


http://www.niftyadmin.cn/n/5049563.html

相关文章

Unity Bolt模块间通信

使用Bolt无代码设计开发的时候&#xff0c;我们不能简单的认为只需要一个FlowMachine就可以完成所有流程的开发。我们需要不同的模块进行拆分&#xff0c;以便更好的管理和协作。这就需要不同模块之间的通信处理。经过研究与使用&#xff0c;将常用的通信方式总结如下&#xff…

vue项目打包成H5apk中使用语音播放

利用浏览器语音播放api功能&#xff0c;在vue项目中调用api实现语音播报。 在mounted生命周期函数中获取浏览器的SpeechSynthesis API data() {return {speech: null,};},mounted() {if ("SpeechSynthesisUtterance" in window) {this.speech window.speechSynthesi…

spring framework 5.2 AOP - spring低级的api

内容目录 1.Pointcut 切点切入点的操作 2.Spring 中的通知 APIadvice通知的生命周期 AOP的一般定义&#xff1a; AOP是一种编程范式&#xff0c;用于将关注点&#xff08;concerns&#xff09;从应用程序的主要业务逻辑中解耦。 关注点是指在应用程序中横切多个模块或组件的功…

知识库搭建保姆级教程,如何从0到1完成知识库搭建

在这个信息爆炸的时代&#xff0c;如何获取、整理和应用知识成为了我们个体价值和企业核心竞争力打造的重要表现&#xff0c;搭建一个高效的知识库可以提升我们企业的竞争力&#xff0c;必要时还能快速切换赛道&#xff0c;开展一个新的领域。 今天我们将结合HelpLook 来与你一…

EPLAN_002#常用功能(二)

一、快速添加端子 端子编号 端子定义 批量修改时&#xff0c;当名称出现冲突时&#xff0c;勾选上 端子排排序&#xff0c;可以基于页 二、多层端子的快速建立 有购物车的代表一个端子 三、手动鞍型跳线 标题 四、购物车图标 在导航器中&#xff0c;有购物车是陷进去的表示 在图…

状压DP杂题

引 好歹第一次正经学状压&#xff0c;好好总结一下 T1 [CQOI2018] 解锁屏幕 题目传送门 解法 状态设计&#xff1a; f S , i : 连上了 S 中的所有的点并且当前处于 i 点的方案数 f_{S,i} : 连上了S中的所有的点并且当前处于i点的方案数 fS,i​:连上了S中的所有的点并且当…

概率深度学习建模数据不确定性

https://zhuanlan.zhihu.com/p/568912284理解论文 What uncertainties do we need in Bayesian deep learning for computer vision? &#xff08;NeurIPS 2017) [1]中的数据不确定性建模&#xff0c;并给出公式推导。论文[1]指出不确定性uncertainty分为随机不确定性(aleator…

03-Scala算术运算符

运算符 scala运算符的使用和Java运算符的使用基本相同&#xff0c;只有个别细节上不同。 注意&#xff1a; ​ Scala中&#xff0c;没有 、-- 操作符&#xff0c;可以通过、-来实现通用的效果 ​ Scala中&#xff0c;一般情况下&#xff0c; 与 equals 是一样的&#xff…