leetcode 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 。
代码
class Solution {class edge{int x,x1,len;public edge(int x, int x1, int len) {this.x = x;this.x1 = x1;this.len = len;}}int[] fa;public void init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}public void union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}public int minimumEffortPath(int[][] heights) {PriorityQueue<edge> priorityQueue=new PriorityQueue<>((o1, o2) -> o1.len-o2.len);int r=heights.length,c=heights[0].length;for(int i=0;i<r;i++)//将相邻的格子高度差作为边的权重for(int j=0;j<c;j++){int cur=i*c+j;if(i<r-1){priorityQueue.add(new edge(cur,cur+c, Math.abs(heights[i][j]-heights[i+1][j])));}if(j<c-1){priorityQueue.add(new edge(cur,cur+1, Math.abs(heights[i][j]-heights[i][j+1])));}}fa=new int[r*c];init();while (!priorityQueue.isEmpty())//不断的加入权重小的边,直到起点和终点连通{edge cur=priorityQueue.poll();union(cur.x,cur.x1);if(find(0)==find(r*c-1))return cur.len;}return 0;}
}
leetcode 1631. 最小体力消耗路径(并查集)相关推荐
- LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...
- 1631. 最小体力消耗路径
链接:1631. 最小体力消耗路径 题解:https://leetcode-cn.com/problems/path-with-minimum-effort/solution/duo-tu-xiang ...
- 【LeetCode】1631. Path With Minimum Effort 最小体力消耗路径(Medium)(JAVA)每日一题
[LeetCode]1631. Path With Minimum Effort 最小体力消耗路径(Medium)(JAVA) 题目描述: You are a hiker preparing for ...
- LeetCode 685. 冗余连接 II(并查集)
1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...
- LeetCode 737. 句子相似性 II(并查集)
文章目录 1. 题目 2. 解题 1. 题目 给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的. 例如,当相似单词对 ...
- LeetCode 305. 岛屿数量 II(并查集)
文章目录 1. 题目 2. 解题 2.1 超时解 2.1 改进计算方法 1. 题目 假设你设计一个游戏,用一个 m 行 n 列的 2D 网格来存储你的游戏地图. 起始的时候,每个格子的地形都被默认标记 ...
- Leetcode 1436旅行终点站 拓扑排序 并查集与队列
题目介绍 题目难度: easy 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 ...
- leetcode 839. 相似字符串组(并查集)
如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似.如果这两个字符串本身是相等的,那它们也是相似的. 例如,"tars" 和 ...
- 并查集(Union-Find)
并查集(Union-Find) 并查集(Union-Find) 1.初始化 2.查询 3.合并 4.平衡性优化,扁平化 5.按秩合并 6.路径压缩 7.代码 常用模板 [★ 547. 省份数量](ht ...
最新文章
- Redis与DB数据同步问题
- 过程的首要目的是好的结果
- 随机对照试验设计的原理
- sqlbulkcopy mysql_c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中
- PHP+HTML实现登出界面倒计时效果
- json java的set函数,JsonConfig的jsonConfig.setExcludes的用法
- 技术情报局(笛卡尔树)
- mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记
- 增强的Java FTP工具----扩展免费版的edtftpj
- Python基础:16面向对象概述
- 应用程序范围的键值对
- Java-基础类库第一篇认识基础类库
- vue.js手册_Vue手册:Vue.js的完整介绍
- talentcentral测评结果_热门推荐!雅诗兰黛2021笔试攻略,最新版Talent Central笔试真题!...
- Robotium学习
- Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (一) 安装和配置
- Fastjson漏洞详情
- html file 英文,(转)如何将input type=file显示的浏览 变成英文的?
- Annotate点云标注工具
- 三种数学语言的相互转化