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

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,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.hqwc.cn/news/265002.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亿道三防平板/手持终端/工业笔记本/车载电脑配件指南,使用高效加倍!

以前我们在选购合适的三防加固计算机时&#xff0c;总是在强调项目的规格参数需求&#xff0c;强调三防平板/手持终端/工业笔记本/车载电脑等终端设备的性能和功能。然而&#xff0c;我们常常忽略了一个重要的维度&#xff1a;用户体验。三防加固计算机作为数字化基础设施和生产…

【Spring教程25】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例总结与SpringMVC工作流程分析

目录 1.入门案例总结2. 入门案例工作流程分析2.1 启动服务器初始化过程2.2 单次请求过程 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Mave…

JVM虚拟机系统性学习-类加载子系统

类加载子系统 类加载的时机 类加载的时机主要有 4 个&#xff1a; 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时&#xff0c;如果对应的类没有初始化&#xff0c;则要先进行初始化 new 关键字创建对象时读取或设置一个类型的静态字段时&#xff08;被 …

[AutoSar]一种ECU间CAN通信的优化方法

目录 关键词平台说明一、背景二、问题现象三、原因四、解决办法五、实现5.1 配置5.2 code 关键词 嵌入式、C语言、autosar 平台说明 项目ValueOSautosar OSautosar厂商EB芯片厂商英飞凌 TC397编程语言C&#xff0c;C编译器TASKING 一、背景 在一个项目中&#xff0c;会从多个…

学习 NVIDIA Omniverse 的最基础概念

无用的前言 近两年关于 Omniverse 的宣传一直很多&#xff0c;可我一直没去了解&#xff0c;连它是个啥都不知道。最近正好有契机需要了解它&#xff0c;于是我今天抽时间看了些它的官方介绍&#xff0c;并按照自己的理解梳理在这里。 官方资料索引 Omniverse 官网主页&…

向IDEA导入SpringBoot项目如何运行

解析项目 拿到项目之后&#xff0c;先分析分析。一般都有.md文件指导你&#xff0c;给你说用什么语言&#xff0c;工具&#xff0c;jdk版本&#xff0c;数据库版本&#xff0c;有没有maven。如果没有就直接将项目导入idea. 1.配置maven,没有maven请看https://blog.csdn.net/m0_…

TTS | emotional-vits情绪语音合成的实现

本文主要介绍了情绪语音合成项目训练自己的数据集的实现过程~ innnky/emotional-vits: 无需情感标注的情感可控语音合成模型&#xff0c;基于VITS (github.com) 目录 0.环境设置 1.数据预处理 2..提取情绪 3.训练 4.推理 过程中遇到的问题与解决【PS】 0.环境设置 因为我…

mysql为什么不推荐使用uuid或者雪花id作为主键

1 前言 在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一&#xff0c;单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处&#xff1f; 本文我们就来分析这个问题,探讨…

机器视觉 齿轮检测

案例:齿轮内径检测 1.使用模板匹配 2.设置匹配区域 3.使用掩膜不必要的干扰 &#xff08;保留两个内径的圆形&#xff09; 1.添加找圆工具 2.添加模板匹配中心坐标 3.给外圈圆添加找圆工具 RunParams.ExpectedCircularArc.CenterX RunParams.ExpectedCircularArc.Cente…

(04730)电路分析基础之正弦交流电路(一)

正弦交流电概述 我们在前面已讨论了直流电路的分析&#xff0c;在直流电路中电压或电流的大小和方向都是不随时间而变化的&#xff1b;但在交流电路中&#xff0c;电压或电流的大小和方向都在随时间而变化&#xff0c;其变化规律多种多样&#xff0c;应用得最普遍的是按正弦规…

全志H6-ARMLinux第1天:全志概述、刷机登陆、官方外设库、蜂鸣器、超声波测距

1. 全志H616课程概述&#xff08;456.01&#xff09; 1.1 为什么学 学习目标依然是Linux系统&#xff0c;平台是ARM架构 蜂巢快递柜&#xff0c;配送机器人&#xff0c;这些应用场景用 C51、STM32 单片机无法实现第三方介入库的局限性&#xff0c;比如刷脸支付和公交车收费设…

#HarmonyOS:装饰器UI描述---@Link

装饰器 装饰器&#xff08;Decorator&#xff09;是一种语法结构&#xff0c;用来在定义时修改类&#xff08;class&#xff09;的行为。 在语法上&#xff0c;装饰器有如下几个特征。 第一个是字符&#xff08;或者说前缀&#xff09;是&#xff0c;后面是一个表达式后面的…