leetcode 1631. Path With Minimum Effort(最小消耗路径)

联通图形和最小花费路径(MCP) 联通图形和最小花费路径(MCP),广度优先遍历,深度优先遍历,弗洛伊德算法,java,动态规划(DP),联通图形(去哪儿2017校招真题),树的中序遍历 阅读详情

在这里插入图片描述

从(0, 0) 到 矩阵右下角 找出一条最短路径,
注意路径的cost不是数字的和,而是这条路径上每两个相邻点的差有个绝对值,路径的cost定义为这些差的绝对值中最大的。每个路径对应一个cost。
在所有路径中找出cost最小的。返回cost。

思路:

我们知道最短路径算法有Dijkstra算法,
dist[v]表示从起点(0, 0)到点v的距离,cost(u, v)表示点u到点v的距离。
如果途中经过u点,那么dist[v] = dist[u] + cost(u, v)

Dijkstra算法是这么个流程:

dist数组初始化为最大值。

从起点(0, 0)出发,计算从(0,0)点到与它相连的所有点的距离,
如果(0, 0)到点v的距离cost[v] < dist[v],那么更新dist[v] = cost[v]
并把(v, dist[v])装入优先队列。

下次从优先队列中取出dist最小的,再从取出的点出发,重复上面的过程,直到优先队列中没有点。

思想就是每次取出从起点到现在路径最短的点,以这个点为中转点,计算它到下一个点的距离,并更新最小距离。

当然上面的算法基于的距离是边的权重,那我们这里如何定义边的权重呢,

假如现在从u点出发,那么与它连接(有边)的点 v 就是它的上下左右四个点,
边的权重就是两个点的height差的绝对值,记为cost。

因为路径的COST是每步cost(差的绝对值)中最大的那个,所以只需要把cost和dist[u]相比,取较大的那个,
也就是cost[v] = max(dist[u], cost),

但是假如计算出来的cost[v]比之前保存的dist[v]大,也就是说当前不是最优路径,那么直接丢弃,不再保存到优先队列,也不更新dis[v]。
如果是最优路径,cost[v] < dist[v], 那么更新dist[v] = cost[v],
并把(v, dist[v])存入优先队列。

下次从优先队列中取出dist最小的,重复上面的过程,直到优先队列中不再有值。

*注意这里的cost是计算整个路径COST时其中的一步,而整个路径COST是所有这些cost中最大的。
计算每条路径COST时取cost最大,最后从众多路径中选择的时候取COST最小。

public int minimumEffortPath(int[][] heights) {
    int[] move = new int[]{-1, 0, 1, 0, -1};
    
    int rows = heights.length;
    int cols = heights[0].length;
    
    PriorityQueue<Pair<Integer, Integer>> queue = new PriorityQueue<>((a, b)->(a.getValue() - b.getValue()));
    int[] dist = new int[rows * cols];
    Arrays.fill(dist, Integer.MAX_VALUE); //起点(0,0)到当前点的距离
    
    dist[0] = 0;
    queue.offer(new Pair(0, 0));
    
    while(!queue.isEmpty()) {
        Pair<Integer, Integer> cur = queue.poll();
        int idx = cur.getKey().intValue();
        int cost = cur.getValue().intValue();
        if(idx == rows * cols - 1) return cost;
        if(cost > dist[idx]) continue;
        int r = idx / cols;
        int c = idx % cols;
        
        for(int i = 0; i < 4; i++) {
            int curR = r + move[i];
            int curC = c + move[i+1];
            if(curR < 0 || curC < 0 || curR >= rows || curC >= cols) continue;
            int curIdx = curR * cols + curC;
            int curCost = Math.abs(heights[curR][curC] - heights[r][c]);
            if(Math.max(cost, curCost) >= dist[curIdx]) continue;
            dist[curIdx] = Math.max(cost, curCost);
            queue.offer(new Pair<Integer, Integer>(curIdx, dist[curIdx]));
        }
    }
    return 0;
}
动态规划 DP leetcode403 青蛙过河问题 https://leetcode.com/problems/frog-jump/QuestionA frog is crossing a river. The river is divided into x units and at each unit there may or may not exist a stone. The frog can jump on a stone, but it m 阅读详情

相关推荐

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 397

LeetCode 矩阵每个元素到0的距离

问题定义 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000。 给定矩阵中至少有一个元素是 0。 矩阵中的元素只在四个方向上相邻: 上、下、左、右。、 解决思路 看了题目,第一眼上来,觉得不就是广度优先搜索寻找每个

qq_34092609的博客 736

单细胞分析实战:当Seurat的SCTransform遇上Harmony,我的整合流程优化笔记

本文详细介绍了单细胞转录组数据分析中SCTransform与Harmony整合流程的优化策略。通过实战案例展示如何调整SCTransform参数、优化Harmony整合效果,并解决常见问题,帮助研究者获得更可靠的生物学发现。特别适合需要处理批次效应的单细胞数据分析人员。

weixin_42552716的博客 356

Leetcode 1631 Path With Minimum Effort (python)

Leetcode Path With Minimum Effort题目解析follow up 题目 解析 这个题目再Leetcode 的problems里面还没有,只出现在Weekly contest 212的第3题 一开始觉得这个题目是个DP,觉得两遍dp可以做,实际上思路错了,两个方向的dp是不行的。 基本上看到四个方向可走的题目就是用最短路径问题来做,最短路径这边也提供两种做法,一种是Bellman ford,另一种是Dijkstra,关于两种做法的详细解释看这题 Leetcode The Ma

qq_37821701的博客 1257

ThreeJS教程:地图案例(包围盒、正投影)

推荐:将加入你的3D工具链。

jianshi2023的博客 1007

lumerical中DEVICE和MODE模块的交互使用(真的很干货!!可以自信的说网上绝对找不到比我更详细的步骤了)

几个脚本文件很重要! Lumerical仿真流程: 一、DEVICE: (1).建模并且运行完之后,在脚本提示符下键入以下脚本行以运行plotDopingProfile.lsf如图1(文件名如果索引不到的话就可以把文件直接用notepad++打开,然后把代码直接输入到device中script脚本中 如图2)脚本文件并生成下图 如图3: (图2) (图1) (图3) (2).仿真...

1万+

【LeetCode】1631.最小体力消耗路径(Path WIth Minimum Effort)

目录题目描述题目大意解题方法方法一:并查集 题目描述 You are a hiker preparing for an upcoming hike. You are given heights, a 2D array of size rows ×\times× columns, where heights[row][col] represents the height of cell (row, col). You are situated in the top-left cell, (0, 0), and

m0_54964586的博客 398

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流

视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿

weixin_27210125的博客 1057

LeetCode:1631. Path With Minimum Effort最小体力消耗路径(C语言)

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

C/C++攻城狮 538

前端技能树,面试复习第 54 天—— 手写代码:情景题

前端修罗场提供全网最专业的前端优质文章与社区服务,为应届生,初中级前端工程师提供全面、优质的面试服务、技能提升、职场解惑服务!内容包含:前端面试辅导,前端面试题,前端交流,前端答疑,前端基础知识,前端知识体系,技能树搭建,Javascript,CSS,CSS3,HTML,React,Vue,小程序,前端简历,职业交流,远程工作,英文交流,英文提升,外企,互联网,国企,大厂,牛客面试题,掘金面试题,面经,优质前端文章分享...

前端进阶之路 | 中大厂、外企、国企内推 | 面试培训 | 简历修改 985

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 863

【LeetCode】1631. 最小体力消耗路径 Path With Minimum Effort

作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录题目描述解题思路并查集代码刷题心得欢迎加入组织日期 题目地址:https://leetcode-cn.com/problems/path-with-minimum-effort/ 题目描述 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在.

负雪明烛 1517

腾讯开源SuperSonic:AI+BI如何重塑数据分析?

SuperSonic是腾讯开源的AI+BI平台,融合Chat BI与Headless BI,为制造企业提供实时数据分析。它通过自然语言交互打破数据壁垒,实现生产、库存、质量、供应链等多环节优化,提升决策效率,其开源生态与扩展性助力企业数字化转型与数据价值挖掘。

数据与算法架构提升之路专栏 4533

【LeetCode】1631. Path With Minimum Effort 最小体力消耗路径(Medium)(JAVA)每日一题

【LeetCode】1631. Path With Minimum Effort 最小体力消耗路径(Medium)(JAVA) 题目描述: You are a hiker preparing for an upcoming hike. You are given heights, a 2D array of size rows x columns, where heights[row][col] represents the height of cell (row, col). You are situat

qq_16927853的博客 324

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode——1631. 最小体力消耗路径(Path With Minimum Effort)——分析及代码(Java)

LeetCode——1631. 最小体力消耗路径[Path With Minimum Effort]——分析及代码[Java]一、题目二、分析及代码1. 并查集(1)思路(2)代码(3)结果三、其他 一、题目 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0

江南土豆的博客 635

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【leetcode】1631. 最小体力消耗路径(path-with-minimum-effort)(二分+DFS)[中等]

链接 https://leetcode-cn.com/problems/path-with-minimum-effort/ 耗时 解题:2 h 55 min 题解:38 min 题意 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往

Krone_的博客 344

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode 1631. Path With Minimum Effort【最小瓶颈路;二分+BFS或DFS;计数排序+并查集;最小生成树】1947

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 635

LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)

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

Michael是个半路程序员 1480

leetcode学习笔记1631 Path With Minimum Effort

leetcode学习笔记1631问题方法1 问题 Path With Minimum Effort 最省力的路径. 给定一个二维数组,值是当前的高度, 每次可以往 上, 下, 左, 右 4个方向移动, 要求返回从左上角移动到右下角时的最小努力值. 从A移动到相邻点B时, 两点高度的差的绝对值就是努力值. 从A移动到B边时的努力值是中途所有努力值中最大的那一个. Example 1: Input: heights = [[1,2,2],[3,8,2],[5,3,5]] Output: 2 Explanat

kuma的博客 453

[leetcode] 102. 二叉树的层序遍历

Description 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], [9,20], [15,7] ] 分析 题目的意思是:这道题要用队列来实现,以前用C++实现过一次,用python还写了几个bug,哈哈哈,看来不复习迟早会出事。 代码 # Definition

Learning from the mistakes 242

《地理信息系统导论》chapter 17 最小耗费路径分析和网络分析

文章目录习作6 寻找服务区 习作6 寻找服务区 输入2 5 (2空格5)作为2分和5分的默认断点

Nishkata的博客 1077

最小体力消耗路径

你准备参加一场远足活动。给你一个二维 rows×columnsrows \times columnsrows×columns 的地图 heights ,其中 heights[row][col]heights[row][col]heights[row][col]表示格子 (row,col)(row, col)(row,col) 的高度。一开始你在最左上角的格子 (0,0)(0, 0)(0,0) ,且你希望去最右下角的格子 (rows−1,columns−1)(rows-1, columns-1)(rows−1

Amber的博客 584

【Leetcode】1631. Path With Minimum Effort

题目地址: https://leetcode.com/problems/path-with-minimum-effort/ 给定一个mmm行nnn列二维矩阵,要从左上角(0,0)(0,0)(0,0)位置走到右下角(m−1,n−1)(m-1,n-1)(m−1,n−1)位置,每一步可以走上下左右四个方向(当然不能走出界),使得该路径的所有相邻点的数值差的绝对值的最大值最小。返回这个最小值。为了方便理解,这里举个例子: 对于上面的图,绿色所显示的路径中,所有相邻节点的差的绝对值中最大的是∣5−3∣|5-3|∣5−

数学、算法爱好者的博客 556

动态规划实例(六):最小花费路径

动态规划最小花费路径

学苑新空 3889

LeetCode每日一题 | 最小体力消耗路径(C++)

题解学习QAQ,俺太菜了

weixin_43403605的博客 937

最小花费

题目描述 在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。 输入格式 第一行输入两个正整数n,m,分别表示总人数和可以互相转账的人的对数。(0 以下m行每行输入三个正整数x,y,z,表示标号为x的人和标号为y的人之间互相转

hbhszxyb的专栏 1562
上一篇: leetcode 1202. Smallest String With Swaps(交换得到最小的字符串)
下一篇: Java Pair & 类型转换问题
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值