你准备参加一场远足活动。给你一个二维 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. 最小体力消耗路径(并查集)相关推荐

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

    文章目录 1. 题目 2. 解题 1. 题目 你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row ...

  2. 1631. 最小体力消耗路径

    链接:1631. 最小体力消耗路径 题解:https://leetcode-cn.com/problems/path-with-minimum-effort/solution/duo-tu-xiang ...

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

    [LeetCode]1631. Path With Minimum Effort 最小体力消耗路径(Medium)(JAVA) 题目描述: You are a hiker preparing for ...

  4. LeetCode 685. 冗余连接 II(并查集)

    1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...

  5. LeetCode 737. 句子相似性 II(并查集)

    文章目录 1. 题目 2. 解题 1. 题目 给定两个句子 words1, words2 (每个用字符串数组表示),和一个相似单词对的列表 pairs ,判断是否两个句子是相似的. 例如,当相似单词对 ...

  6. LeetCode 305. 岛屿数量 II(并查集)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.1 改进计算方法 1. 题目 假设你设计一个游戏,用一个 m 行 n 列的 2D 网格来存储你的游戏地图. 起始的时候,每个格子的地形都被默认标记 ...

  7. Leetcode 1436旅行终点站 拓扑排序 并查集与队列

    题目介绍 题目难度: easy 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 ...

  8. leetcode 839. 相似字符串组(并查集)

    如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似.如果这两个字符串本身是相等的,那它们也是相似的. 例如,"tars" 和 ...

  9. 并查集(Union-Find)

    并查集(Union-Find) 并查集(Union-Find) 1.初始化 2.查询 3.合并 4.平衡性优化,扁平化 5.按秩合并 6.路径压缩 7.代码 常用模板 [★ 547. 省份数量](ht ...

最新文章

  1. Redis与DB数据同步问题
  2. 过程的首要目的是好的结果
  3. 随机对照试验设计的原理
  4. sqlbulkcopy mysql_c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中
  5. PHP+HTML实现登出界面倒计时效果
  6. json java的set函数,JsonConfig的jsonConfig.setExcludes的用法
  7. 技术情报局(笛卡尔树)
  8. mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记
  9. 增强的Java FTP工具----扩展免费版的edtftpj
  10. Python基础:16面向对象概述
  11. 应用程序范围的键值对
  12. Java-基础类库第一篇认识基础类库
  13. vue.js手册_Vue手册:Vue.js的完整介绍
  14. talentcentral测评结果_热门推荐!雅诗兰黛2021笔试攻略,最新版Talent Central笔试真题!...
  15. Robotium学习
  16. Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (一) 安装和配置
  17. Fastjson漏洞详情
  18. html file 英文,(转)如何将input type=file显示的浏览 变成英文的?
  19. Annotate点云标注工具
  20. 三种数学语言的相互转化

热门文章

  1. 优质学习内容(自用)
  2. Linux下send错误代码32
  3. 如何开展软件架构之概念架构
  4. 【转】ORACLE中的子查询 ---OCP--047--46
  5. 一个简单易用的导出Excel类
  6. POM.xml红叉解决方法
  7. RUNOOB python练习题4
  8. 社群系统ThinkSNS+ V2.2-V2.3升级教程
  9. Free SQLSever 2008的书
  10. Candidate sampling:NCE loss和negative sample