【LeetCode:1631. 最小体力消耗路径 | BFS + 二分】

news2024/11/25 12:49:21

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ BFS + 二分
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
      • ⚡ 其它解法
    • 💬 共勉

🚩 题目链接

  • 1631. 最小体力消耗路径

⛲ 题目描述

你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。

一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。

请你返回从左上角走到右下角的最小 体力消耗值 。

示例 1:

在这里插入图片描述

输入:heights = [[1,2,2],[3,8,2],[5,3,5]]
输出:2
解释:路径 [1,3,5,3,5] 连续格子的差值绝对值最大为 2 。
这条路径比路径 [1,2,2,2,5] 更优,因为另一条路径差值最大值为 3 。
示例 2:
在这里插入图片描述

输入:heights = [[1,2,3],[3,8,4],[5,3,5]]
输出:1
解释:路径 [1,2,3,4,5] 的相邻格子差值绝对值最大为 1 ,比路径 [1,3,5,3,5] 更优。
示例 3:
在这里插入图片描述

输入:heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]]
输出:0
解释:上图所示路径不需要消耗任何体力。

提示:

rows == heights.length
columns == heights[i].length
1 <= rows, columns <= 100
1 <= heights[i][j] <= 106

🌟 求解思路&实现代码&运行结果


⚡ BFS + 二分

🥦 求解思路
  1. 首先,求解这道题目的思路应该是先通过BFS和DFS来求解,发现超时,不能求解,然后在此基础上进行后续的优化。
  2. 我们不妨将问题转换为,是否存在一条从左上角到右下角的路径,其经过的所有数值的最大值不超过target?如果存在,右边界缩小,反之,左边界扩大,正好通过二分求解该过程。
  3. 实现代码如下所示:
🥦 实现代码
class Solution {

    int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

    public int minimumEffortPath(int[][] heights) {
        int m=heights.length;
        int n=heights[0].length;
        int left=-1;
        int right=1000000;
        while (left+1<right) {
            int mid=(left+right) / 2;
            Queue<int[]> queue=new LinkedList<int[]>();
            queue.offer(new int[]{0, 0});
            boolean[][] flag=new boolean[m][n];
            flag[0][0]=true;
            while (!queue.isEmpty()) {
                int[] temp=queue.poll();
                int x=temp[0], y=temp[1];
                for (int i=0;i<4;i++) {
                    int nx=x+dirs[i][0];
                    int ny=y+dirs[i][1];
                    if (nx>=0&&nx<m&&ny>=0&&ny<n&&!flag[nx][ny]&&Math.abs(heights[x][y]-heights[nx][ny])<=mid) {
                        queue.add(new int[]{nx, ny});
                        flag[nx][ny]=true;
                    }
                }
            }
            if(flag[m-1][n-1]){
                right=mid;
            }else{
                left=mid;
            }
        }
        return right;
    }
}
🥦 运行结果

在这里插入图片描述

⚡ 其它解法

  1. 并查集。
  2. 最短路径算法。
  3. 后续补充完善。。。

💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高仿B站视频网站系统源码 附带完整的搭建教程

现如今&#xff0c;视频分享网站逐渐成为人们休闲娱乐和学习知识的重要平台。B站作为中国最大的弹幕视频网站之一&#xff0c;以其独特的弹幕系统、丰富的内容和良好的用户体验赢得了广大用户的喜爱。然而&#xff0c;对于一些想要搭建自己的视频分享网站的用户来说&#xff0c…

【ScienceAI Weekly】IBM新AI芯片提效25倍;清华大学发AI辅助框架;DeepMind新工具预测220万新晶体

「ScienceAI Weekly」是 HyperAI 超神经新创建的半月更栏目&#xff0c;主要从科研成果、企业动态、工具资源、近期活动 4 个维度&#xff0c;收集呈现 ScienceAI 领域近期值得关注的最新动态&#xff0c;以期为长期关注该领域的从业者、爱好者&#xff0c;提供更有价值的圈内资…

Docker中的常见命令

Docker开机自启 systemctl enable dockerDocker容器开机自启 docker update --restartalways [容器名/容器id]案例&#xff1a;docker操作nginx 拉取Nginx镜像 docker pull nginx查看镜像 docker images创建并运行Nginx容器 docker run -d --name nginx -p 80:80 nginx查…

19、线性容器、适配器容器

19、线性容器、适配器容器 线性容器向量 vector初始化迭代器使用 双端队列 deque双端队列和向量的差别成员函数 列表 list常用函数 适配器容器栈队列 线性容器 向量 vector 成员函数 front() 获取首元素 back() 获取尾元素 insert() 插入元素 erase() 删除元素 push_back() …

AIGC实战——WGAN(Wasserstein GAN)

AIGC实战——WGAN 0. 前言1. WGAN-GP1.1 Wasserstein 损失1.2 Lipschitz 约束1.3 强制 Lipschitz 约束1.4 梯度惩罚损失1.5 训练 WGAN-GP 2. GAN 与 WGAN-GP 的关键区别3. WGAN-GP 模型分析小结系列链接 0. 前言 原始的生成对抗网络 (Generative Adversarial Network, GAN) 在…

【js】数字字符串的比较

今天排查一个日历组件的bug&#xff0c;month打印出来是9&#xff0c;month1打印出来为12&#xff0c;比较month和month1大小进入if或者else&#xff0c;奇怪的是每次都是进入的month>month1语句里面 打印typeOf&#xff08;a&#xff09;和typeOf&#xff08;b&#xff09…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…

MySQL - InnoDB 和 MyISAM 的索引实现的区别

InnoDB 和 MyISAM 底层都是 B 树的实现&#xff0c;但是二者却完全不同 。 主键索引文件存储不同 MyISAM 引擎的索引文件和数据文件是分离的&#xff0c;而 InnoDB 引擎的索引文件和数据文件是不分离的。 MyISAM 引擎的叶子节点存储的是数据文件的地址&#xff0c;而 InnoDB 的…

VR全景开启智能化酒店获客新模式,打造高人气入住

一般而言&#xff0c;消费者如果想要了解酒店信息&#xff0c;渠道主要是通过第三方平台商家发布的图片&#xff0c;有多次入住经验的可能还会看下以往用户的评价&#xff0c;以及借助酒店的平面宣传效果图看下空间布局等&#xff0c;但是这种用户评价的主观色彩&#xff0c;很…

【数据结构与算法】实现红黑树

文章目录 一、红黑树的五条规则二、红黑树的三种变换2.1.变色2.2.左旋转2.3.右旋转 三、红黑树的插入操作3.1.情况13.2.情况23.3.情况33.4.情况43.5.情况53.6.案例插入10插入9插入8插入7插入6插入5插入4插入3插入2插入1 一、红黑树的五条规则 红黑树除了符合二叉搜索树的基本规…

使用WebyogSQLyog使用数据库

数据库 实现数据持久化到本地&#xff1a; 使用完整的管理系统统一管理&#xff0c; 数据库&#xff08;DateBase&#xff09;&#xff1a; 为了方便数据存储和管理&#xff08;增删改查&#xff09;&#xff0c;将数据按照特定的规则存储起来 安装WebyogSQLyog -- 创建数…

探索低代码的潜力、挑战与未来展望

低代码开发作为一种新兴的开发方式&#xff0c;正在逐渐改变着传统的编程模式&#xff0c;低代码使得开发者无需编写大量的代码即可快速构建各种应用程序。然而&#xff0c;低代码也引发了一系列争议&#xff0c;有人称赞其为提升效率的利器&#xff0c;也有人担忧其可能带来的…

【Spring教程22】Spring框架实战:Spring事务角色与 Spring事务属性、事务传播行为代码示例详解

目录 1.Spring事务角色1.1 未开启Spring事务之前:1.2 开启Spring的事务管理后2 Spring事务属性2.1 事务配置2.2 转账业务追加日志案例2.2.1 需求分析2.2.2 环境准备 2.3 事务传播行为2.3.1.修改logService改变事务的传播行为2.3.2 事务传播行为的可选值 欢迎大家回到《 Java教…

【EXCEL】规划求解

题目&#xff1a; s1:设置EXCEL加载项(第一次使用)&#xff1a;开发工具–>EXCEL加载项–>勾选“规划求解加载项”–>确定 s2&#xff1a;填入公式&#xff08;等号左边&#xff09; s3&#xff1a;数据–>规划求解 s4&#xff1a;得出结果 总结&#xff1a;这玩意…

0基础学java-day15(泛型)

一、泛型 1 泛型的理解和好处 1.1 看一个需求 【不小心加入其它类型&#xff0c;会导致出现类型转换异常】 package com.hspedu.generic;import java.util.ArrayList;/*** author 林然* version 1.0*/ public class Generic01 {SuppressWarnings("all")public st…

NSSCTF web刷题记录7

文章目录 [SDCTF 2022]CURL Up and Read [SDCTF 2022]CURL Up and Read 考点&#xff1a;SSRF 打开题目发现是curl命令&#xff0c;提示填入url 尝试http://www.baidu.com&#xff0c;成功跳转 将url的字符串拿去解码&#xff0c;得到json格式数据 读取下环境变量&#xff0c…

【算法集训】基础数据结构:三、链表

链表就是将所有数据都用一个链子串起来&#xff0c;其中链表也有多种形式&#xff0c;包含单向链表、双向链表等&#xff1b; 现在毕竟还是基础阶段&#xff0c;就先学习单链表吧&#xff1b; 链表用头结点head表示一整个链表&#xff0c;每个链表的节点包含当前节点的值val和下…

社交媒体图像识别与情感分析

社交媒体图像识别与情感分析是当前人工智能领域的一个研究热点。通过对社交媒体上大量的图像和文本数据进行深度学习和情感分析&#xff0c;可以提取出图像中的情感信息&#xff0c;从而为社交媒体用户提供更加个性化和精准的内容推荐和服务。 在社交媒体图像识别方面&#xff…

LabVIEW与Tektronix示波器实现电源测试自动化

LabVIEW与Tektronix示波器实现电源测试自动化 在现代电子测试与测量领域&#xff0c;自动化测试系统的构建是提高效率和精确度的关键。本案例介绍了如何利用LabVIEW软件结合Tektronix MDO MSO DPO2000/3000/4000系列示波器&#xff0c;开发一个自动化测试项目。该项目旨在自动…

C#结合JavaScript实现多文件上传

目录 需求 引入 关键代码 操作界面 ​JavaScript包程序 服务端 ashx 程序 服务端上传后处理程序 小结 需求 在许多应用场景里&#xff0c;多文件上传是一项比较实用的功能。实际应用中&#xff0c;多文件上传可以考虑如下需求&#xff1a; 1、对上传文件的类型、大小…