leetcode 778. 水位上升的泳池中游泳(并查集)

在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。

现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。

你从坐标方格的左上平台 (0,0) 出发。最少耗时多久你才能到达坐标方格的右下平台 (N-1, N-1)?

示例 1:

输入: [[0,2],[1,3]]
输出: 3
解释:
时间为0时,你位于坐标方格的位置为 (0, 0)。
此时你不能游向任意方向,因为四个相邻方向平台的高度都大于当前时间为 0 时的水位。

等时间到达 3 时,你才可以游向平台 (1, 1). 因为此时的水位是 3,坐标方格中的平台没有比水位 3 更高的,所以你可以游向坐标方格中的任意位置

代码

class Solution {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 swimInWater(int[][] grid) {int n=grid.length;int[][] height=new int[n*n][2];fa=new int[n*n];int[][] dir=new int[][]{{0,1},{1,0},{-1,0},{0,-1}};init();for(int i=0;i<n;i++)//记录某个水位对于的坐标for(int j=0;j<n;j++){height[grid[i][j]][0]=i;height[grid[i][j]][1]=j;}for(int i=0;i<n*n;i++)
//遍历所有水位,一旦在某个水位,【0,0】和【n-1,n-1】位置连通,则返回{int cur=height[i][0]*n+height[i][1];for(int[] d:dir)//搜索4个方向{int nextX=height[i][0]+d[0],nextY=height[i][1]+d[1];if(nextX<0||nextX>=n||nextY<0||nextY>=n||grid[nextX][nextY]>i) continue;union(cur,nextX*n+nextY);if(find(0)==find(n*n-1)) return i;}}return -1;}
}

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

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

相关文章

2020年十大币预测_2020年十大商业智能工具

2020年十大币预测In the rapidly growing world of today, when technology is expanding at a rate like never before, there are plenty of tools and skills to explore, learn, and master. In this digital and data age, Business Information and Intelligence have cl…

如何使用MySQL和JPA使用Spring Boot构建Rest API

Hi Everyone! For the past year, I have been learning JavaScript for full-stack web development. For a change, I started to master Java — the powerful Object Oriented Language.嗨&#xff0c;大家好&#xff01; 在过去的一年中&#xff0c;我一直在学习用于全栈W…

翻译

令 $m>n>1$ 为正整数. 一个集合含有 $m$ 个给定的实数. 我们从中选取任意 $n$ 个数, 记作 $a_1$, $a_2$, $\dotsc$, $a_n$, 并提问: 是否 $a_1<a_2<\dotsb < a_n$ 正确? 证明: 我们可以最多问 $n!-n^22n-2m(n-1)(1\lfloor \log_{n} m \rfloor)-m$ 个问题&#…

720 智能硬件与 LeanCloud 云端的默契协作

【 玩转 LeanCloud 】开发者经验分享&#xff1a; 作者&#xff1a;谢子超 720技术负责人&#xff0c;从业十余年&#xff0c;一直负责软件开发工作。 我们的产品是与监控和改善室内空气质量相关的智能硬件&#xff0c;我们使用 LeanCloud 平台已经有 2 年多了&#xff0c;借此…

linux cifs windows 慢,windows上使用dockerIO特别慢有没有更优的解决方案?

复制一个大佬的回答Docker for Windows是在Hyper-V虚拟机上跑Linux&#xff0c;文件挂载是通过SMB协议从Windows挂载到Linux&#xff0c;文件读写都经过网络&#xff0c;遇到Laravel这种每次启动就要加载几百个文件的框架&#xff0c;文件性能问题就尤其明显。最好的验证方法就…

编译原理—词法分析器(Java)

1.当运行程序时&#xff0c;程序会读取项目下的program.txt文件 2. 程序将会逐行读取program.txt中的源程序&#xff0c;进行词法分析&#xff0c;并将分析的结果输出。 3. 如果发现错误&#xff0c;程序将会中止读取文件进行分析&#xff0c;并输出错误提示 所用单词的构词规…

【BZOJ4653】[Noi2016]区间 双指针法+线段树

【BZOJ4653】[Noi2016]区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出 m 个区间&#xff0c;使得这 m个区间共同包含至少一个位置。换句话说&#xff0c;就是使得存在一个 x&#xff0c;使得对于每一个被选中的区间 [li,ri]&#xff0c;都…

为什么我们需要使用Pandas新字符串Dtype代替文本数据对象

We have to represent every bit of data in numerical values to be processed and analyzed by machine learning and deep learning models. However, strings do not usually come in a nice and clean format and require a lot preprocessing.我们必须以数值表示数据的每…

递归方程组解的渐进阶的求法——代入法

递归方程组解的渐进阶的求法——代入法 用这个办法既可估计上界也可估计下界。如前面所指出&#xff0c;方法的关键步骤在于预先对解答作出推测&#xff0c;然后用数学归纳法证明推测的正确性。 例如&#xff0c;我们要估计T(n)的上界&#xff0c;T(n)满足递归方程&#xff1a;…

【转载】C# 理解泛型

术语表 generics&#xff1a;泛型type-safe&#xff1a;类型安全collection: 集合compiler&#xff1a;编译器run time&#xff1a;程序运行时object: 对象.NET library&#xff1a;.Net类库value type: 值类型box: 装箱unbox: 拆箱implicity: 隐式explicity: 显式linked list:…

javascript 作用_JavaScript承诺如何从内到外真正发挥作用

javascript 作用One of the most important questions I faced in interviews was how promises are implemented. Since async/await is becoming more popular, you need to understand promises.我在采访中面临的最重要的问题之一是如何实现承诺。 由于异步/等待变得越来越流…

linux 文件理解,对linux中文件系统的理解

首先在linux系统当中一个可被挂在的数据为一个文件系统1.在安装linux过程中我们要进行磁盘分区&#xff0c;可以分根目录/,‘/home‘&#xff0c;‘/boot’,swap等等这些分区&#xff0c;每一个分区(’/(根目录)‘&#xff0c;’/home‘...)就是一个文件系统。2.文件系统分配完…

编译原理—语法分析器(Java)

递归下降语法分析 1. 语法成分说明 <语句块> :: begin<语句串> end <语句串> :: <语句>{&#xff1b;<语句>} <语句> :: <赋值语句> | <循环语句> | <条件语句> <关系运算符> :: < | < | > | > | |…

老笔记整理四:字符串的完美度

今天在宠果网上发现一道题目&#xff0c;求一个字符串的完美度http://hero.pongo.cn/home/index觉得这道题很有趣就挑战了一下&#xff0c;结果没有在规定的1小时里面写完&#xff08;笑&#xff09;&#xff0c;多花了10分钟终于做出来了。题目是这样的&#xff1a;我们要给每…

nlp构建_使用NLP构建自杀性推文分类器

nlp构建Over the years, suicide has been one of the major causes of death worldwide, According to Wikipedia, Suicide resulted in 828,000 global deaths in 2015, an increase from 712,000 deaths in 1990. This makes suicide the 10th leading cause of death world…

域名跳转

案例&#xff1a;当访问lsx.com网站&#xff0c;是我最早论坛的域名。回车之后会自动跳转到lshx.com。 为什么药lsx跳转到lshx.com呢&#xff1f; 为了统一品牌。建议换成了lshx.com。所有之前的lsx.com就不要用了&#xff0c;就让它跳转到lshx.com。是因为之前lsx.com上有很多…

Elastic Stack 安装

Elastic Stack 是一套支持数据采集、存储、分析、并可视化全面的分析工具&#xff0c;简称 ELK&#xff08;Elasticsearch&#xff0c;Logstash&#xff0c;Kibana&#xff09;的缩写。 安装Elastic Stack 时&#xff0c;必须相关组件使用相同的版本&#xff0c;例如&#xff1…

区块链去中心化分布式_为什么渐进式去中心化是区块链的最大希望

区块链去中心化分布式by Arthur Camara通过亚瑟卡马拉(Arthur Camara) 为什么渐进式去中心化是区块链的最大希望 (Why Progressive Decentralization is blockchain’s best hope) 不变性是区块链的最大优势和最大障碍。 逐步分权可能是答案。 (Immutability is blockchain’s…

编译原理—语义分析(Java)

递归下降语法制导翻译 实现含多条简单赋值语句的简化语言的语义分析和中间代码生成。 测试样例 begin a:2; b:4; c:c-1; area:3.14*a*a; s:2*3.1416*r*(hr); end #词法分析 public class analyzer {public static List<String> llistnew ArrayList<>();static …

linux问题总结

linux问题总结 编写后台进程的管理脚本&#xff0c;使用service deamon-name stop的时候&#xff0c;出现如下提示&#xff1a;/sbin/service: line 66: 23299 Terminated env -i LANG"$LANG" PATH"$PATH" TERM"$TERM" "${SERVICEDIR}/${SE…