78、贪心-跳跃游戏

思路

方法1: canJump01 - 使用递归(回溯法)

这个方法是通过递归实现的,它从数组的第一个位置开始,尝试所有可能的跳跃步数,直到达到数组的最后一个位置或遍历完所有的可能性。

思路:

  • 如果数组为空或者长度为0,直接返回 false
  • 从数组的第一个位置(index = 0)开始调用递归函数 process
  • 递归的终止条件是,如果当前的 index 等于 N-1(数组的最后一个位置),则返回 true
  • 在当前位置,根据该位置的数字决定可以跳跃的步数范围,递归地尝试每一种跳跃步数。
  • 如果任何一种跳跃方式可以到达最后位置,则返回 true

缺点:

  • 这种方法的时间复杂度非常高,因为它尝试了所有可能的路径,可能导致指数级的计算量。

方法2: canJump02 - 使用动态规划

这个方法使用了动态规划(DP)来减少重复计算,提高效率。

思路:

  • 初始化一个布尔型的数组 dp,其中 dp[i] 表示是否可以从起始位置跳跃到位置 i
  • dp[0] 初始化为 true,因为起始位置总是可达的。
  • i = 1 开始遍历数组,对于每个位置 i,检查所有之前的位置 j,看是否存在一个 j,使得从 j 跳跃到 i 是可行的(即 dp[j]truej + nums[j] 大于等于 i)。
  • 如果找到这样的 j,则设置 dp[i] = true 并中断当前循环。

优点:

  • 时间复杂度为 O(n^2),空间复杂度为 O(n)。

方法3: canJump - 贪心算法

使用贪心算法解决问题,思路更为直接和高效。

思路:

  • 维护一个变量 maxReach 来存储从起点开始可达的最远位置。
  • 遍历数组,对于每个位置 i,首先检查 i 是否超过了之前的 maxReach。如果超过,则说明无法到达当前位置,返回 false
  • 然后更新 maxReachmax(maxReach, i + nums[i])
  • 如果在任何时刻 maxReach 大于等于数组的最后位置,直接返回 true

优点:

  • 时间复杂度为 O(n),空间复杂度为 O(1),是三种方法中最优的。

代码如下:

class Solution {
   public boolean canJump01(int[] nums) {
        if (nums==null||nums.length==0){
            return false;
        }
        return process(nums,0,nums.length);
    }

    private boolean process(int[] nums, int index, int N) {
        if (index==N-1){
            return true;
        }
        int num=nums[index];
        boolean ans=false;
        //当前节点跳 1-num 步
        for (int i = 1; i <=num; i++) {
            ans=ans||process(nums,index+i,N);
        }
        return ans;
    }


    public boolean canJump02(int[] nums){
        if (nums==null||nums.length==0){
            return false;
        }
        int N=nums.length;
        boolean[] dp = new boolean[N];
        dp[0] = true; // 起点是可达的
        for (int i = 1; i < nums.length; i++) {
            // 初始化当前位置为不可达
            dp[i] = false;
            // 遍历到当前位置之前的所有位置
            for (int j = 0; j < i; j++) {
                // 如果位置 j 可达,并且从 j 跳跃足够远以到达 i
                if (dp[j] && j + nums[j] >= i) {
                    dp[i] = true;
                    break; // 找到一个可达的位置后,无需继续检查
                }
            }
        }
        return dp[N-1];
    }

     //假设从 0 跳 最远跳到i位置 那说明 0-i都是可达的,所以只需要关心每次跳多远即可
    //然后再次从1 位置尝试跳最远  如果1 >max 说明在0位置跳的时候无法跳到1
    public boolean canJump(int[] nums) {
        int maxReach = 0; // 可达的最远位置
        for (int i = 0; i < nums.length; i++) {
            // 如果当前位置超过了最远可达位置,则无法继续
            if (i > maxReach) {
                return false;
            }
            // 更新最远可达位置
            maxReach = Math.max(maxReach, i + nums[i]);
            // 如果最远可达位置已经超过或到达数组的最后一个位置
            if (maxReach >= nums.length - 1) {
                return true;
            }
        }
        // 结束循环后,如果还没返回true,则说明最后位置不可达
        return false;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/587290.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

018、Python+fastapi,第一个Python项目走向第18步:ubuntu24.04 安装cuda和pytorch环境

一、说明 我们安装了pytorch环境之后&#xff0c;会用yolo v9 来测试一下&#xff0c;看8g 显存能不能跑下来&#xff0c;上次用无影云电脑&#xff0c;4cpu8g内存直接爆了&#xff0c;云电脑也死机了&#xff0c;提示一直占用内存不释放&#xff0c;我自己的云电脑不能占用内…

帕金森患者应该怎么注意生活方式?

在面对帕金森病的挑战时&#xff0c;科学合理地改善日常生活方式&#xff0c;不仅能帮助患者更好地管理病情&#xff0c;还能提升生活质量。今天&#xff0c;让我们一起探索如何通过简单的日常调整&#xff0c;为患有帕金森病的朋友们带来积极的变化。 饮食调整&#xff1a;营养…

安全再升级,亚信安慧AntDB数据库与亚信安全二次牵手完成兼容性互认证

日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;的产品与亚信科技&#xff08;成都&#xff09;有限公司&#xff08;简称&#xff1a;亚信安全&#xff09;再次携手&#xff0c;完成亚信安慧AntDB数据库与亚信安全IPoE接入认证系统…

PPO 学习笔记

用PPO算法求解整个神经网络在迭代过程中的梯度问题 每走一步就会得到一个新的状态&#xff0c;把这个状态传到网络里面&#xff0c;会得到一个 action&#xff0c;执行这个 action 又会到达一个新状态 policy 中由状态 st 生成动作 at&#xff0c;生成的这个 at 是由整个网络的…

CGAL 点云数据生成DSM、DTM、等高线和数据分类

原文链接 CGAL 点云数据生成DSM、DTM、等高线和数据分类 - 知乎 在GIS应用软件中使用的许多传感器(如激光雷达)都会产生密集的点云。这类应用软件通常利用更高级的数据结构&#xff1a;如&#xff1a;不规则三角格网 (TIN)是生成数字高程模型 (DEM) 的基础&#xff0c;也可以利…

CSS中的圆角和阴影

目录 盒子圆角 圆角基础使用 圆角常见使用 通过设置盒子圆角得到一个圆形 通过设置盒子圆角&#xff0c;得到一个“操场”的样式 盒子阴影 文字阴影 盒子圆角 圆角基础使用 在 CSS3 中&#xff0c;新增了圆角边框样式&#xff0c;这样我们的盒子就可以变圆角了。 使用…

深入浅出TCP 与 UDP

&#x1f525; 引言 在互联网的广阔天地里&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff09;和UDP&#xff08;User Datagram Protocol&#xff09;作为传输层的两大支柱&#xff0c;各自承担着不同的使命。下面这篇文章将带你从基础到进阶&#xff0c;全…

8. Django 表单与模型

8. 表单与模型 表单是搜集用户数据信息的各种表单元素的集合, 其作用是实现网页上的数据交互, 比如用户在网站输入数据信息, 然后提交到网站服务器端进行处理(如数据录入和用户登录注册等).网页表单是Web开发的一项基本功能, Django的表单功能由Form类实现, 主要分为两种: dj…

练习题(2024/5/1)

1二叉树的层平均值 简单 相关标签 相关企业 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[3.00000,14.50000…

关于建表、表字段的增删改等的语法及举例(字段类型、字段约束、建表语法、表字段增删改、注意事项等)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

ASUS华硕ROG幻15笔记本GU502GU原装出厂Windows10系统工厂模式安装包下载,带MyASUS WinRE恢复重置功能

华硕ROG Zephyrus M15笔记本原厂Win10预装OEM系统&#xff0c;恢复开箱状态 适用型号&#xff1a;GU502GW&#xff0c;GU502GU&#xff0c;GU502GV 链接&#xff1a;https://pan.baidu.com/s/1lTK_CUFT9N3q0sXBS7ENPg?pwd8hm2 提取码&#xff1a;8hm2 华硕原装W10系统工厂…

警惕虚假宣传:GPT-4.0免费领取真相揭秘

警惕虚假宣传&#xff1a;GPT-4.0免费领取真相揭秘 在人工智能技术飞速发展的今天&#xff0c;尤其是OpenAI推出的GPT-4.0成为技术前沿的焦点&#xff0c;不少不法分子也开始借机进行欺诈。网络上出现了大量声称“免费领取GPT-4.0”的虚假信息&#xff0c;这不仅误导了公众&am…

嵌入式全栈开发学习笔记---C语言知识复习大全1

目录 Linux开发者的基本素养-文件分类 补充命令1-pwd 补充命令2-clear 在Linux上编写C程序 在Linux上编译程序 思考&#xff1a;C语言中一定要main函数吗 我们为什么要学习C语言&#xff1f;学习C语言有助于理解计算机底层工作原理&#xff01; 后面我们的很多项目也都是…

ML.NET机器学

一、新建项目MLL 二、选择方案 我们这里选择的是计算机视觉-->图像分类 三、选择环境 本地(CPU) 四、选择数据 我自己造了2个验证码的目录 五、训练 六、评估 7、代码中使用 运行效果&#xff1a;

MySQL中索引的数据结构

2.3.1. 索引数据结构 索引就是能够提高查询速度的一种数据结构&#xff0c;在数据插入时就进行了排序&#xff08;会影响插入和更新的性能&#xff09;&#xff0c;索引广泛使用的是B树索引。 B树索引结构&#xff1a; 目前是基于磁盘排序效率最高的数据结构&#xff0c;树非…

Linux:浏览器访问网站的基本流程(优先级从先到后)

浏览器访问网站的基本流程&#xff08;优先级从先到后&#xff09; 首先查找浏览器是否存在该网站的访问缓存 其次查找本机的域名解析服务器 windows&#xff1a;C:\Windows\System32\drivers\etc\hostsLinux&#xff1a;/etc/hosts 使用外部的域名解析服务器解析&#xff…

如何安装cuda版本的torch-sparse和torch-scatter

安装对应cuda版本的torch&#xff0c;确保cuda可用 使用nvidia-smi查看cuda版本&#xff0c;我的是11.4&#xff0c;然后就找到pytorch历史版本&#xff0c;页面搜索cuda 11.4&#xff0c;没搜到&#xff0c;继续往小版本搜&#xff0c;搜到cuda 11.3&#xff0c;果断安装&…

【深度学习实战(29)】后处理之NMS(非极大值抑制)

一、NMS工作原理 NMS 的工作原理&#xff1a; 置信度排序&#xff1a;对于每个类别&#xff0c;NMS 首先根据每个边界框的置信度&#xff08;即预测框中含有目标的概率&#xff09;进行排序。选择最高置信度框&#xff1a;从置信度最高的边界框开始&#xff0c;将其作为当前考…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(2)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;2&#xff09; 一、Hystrix&#xff1a;基于 RestTemplate 的统一降级配置 1、Hystrix&#xff1a;基于 RestTemplate 的统一降级配置 步骤&#xff1a; 1&#xff09;在项目的 pom.xml …

前端 CSS

目录 选择器 复合选择器 伪类-超链接 结构伪装选择器 伪元素选择器 画盒子 字体属性 CSS三大属性 Emmet写法 背景属性 显示模式 盒子模型 盒子模型-组成 盒子模型-向外溢出 盒子模型-圆角 盒子模型-阴影 flex position定位 CSS小精灵 字体图标 垂直对齐方式…