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 更高的,所以你可以游向坐标方格中的任意位置

示例2:

输入: [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]]

输入: 16

解释:

0 1 2 3 4

24 23 22 21 5

12 13 14 15 16

11 17 18 19 20

10 9 8 7 6

最终的路线用加粗进行了标记。

我们必须等到时间为 16,此时才能保证平台 (0, 0) 和 (4, 4) 是连通的

提示:

2 <= N <= 50.

grid[i][j] 位于区间 [0, …, N*N - 1] 内。

class Solution {

public int swimInWater(int[][] grid) {

int N = grid.length;

int lo = Math.max(grid[0][0], grid[N - 1][N -1]);

int hi = N * N - 1;

BitSet bs = new BitSet(hi);

while (lo < hi) {

int mi = (lo + hi) >> 1;

if (dfs(grid, 0, 0, mi, bs)) hi = mi;

else lo = mi + 1;

bs.clear();

}

return lo;

}

public boolean dfs (int[][] grid, int i, int j, int limit, BitSet bs) {

if (bs.get(i * grid.length + j) || grid[i][j] > limit) return false;

if (i == grid.length - 1 && j == grid.length - 1) return true;

bs.set(i * grid.length + j);

if (i < grid.length - 1 && dfs(grid, i + 1, j, limit, bs)) return true;

if (j < grid.length - 1 && dfs(grid, i, j + 1, limit, bs)) return true;

if (i > 0 && dfs(grid, i - 1, j, limit, bs)) return true;

if (j > 0 && dfs(grid, i, j - 1, limit, bs)) return true;

return false;

}

}

java圆形泳池问题_Java实现 LeetCode 778 水位上升的泳池中游泳(二分+DFS)相关推荐

  1. LeetCode——778. 水位上升的泳池中游泳(Swim in Rising Water)——分析及代码(Java)

    LeetCode--778. 水位上升的泳池中游泳[Swim in Rising Water]--分析及代码[Java] 一.题目 二.分析及代码 1. 并查集 (1)思路 (2)代码 (3)结果 三 ...

  2. LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

    文章目录 1. 题目 2. 解题 1. 题目 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度. 现在开始下雨了.当时间为 t 时 ...

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

    在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度. 现在开始下雨了.当时间为 t 时,此时雨水导致水池中任意位置的水位为 t .你 ...

  4. [leetcode]778水位上升的泳池中游泳,并查集

    本来想用二分的,但看到题面上限制的条件:N*N的二维数组,N小于等于50,而且还限制了二维数组的值是1 ~ N * N-1的排列,看完题解才知道能用并查集做. 题意 在时间为t的时候,水位也会上升到t ...

  5. leecode 778 水位上升的泳池中游泳

    来源:力扣(LeetCode) 778 水位上升的泳池中游泳 在一个 n x n 的整数矩阵 grid 中,每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度. 当开始下雨时,在 ...

  6. 778. 水位上升的泳池中游泳

    链接:778. 水位上升的泳池中游泳 题解:https://leetcode-cn.com/problems/swim-in-rising-water/solution/shui-wei-shang- ...

  7. 【图论刷题-4】力扣 778. 水位上升的泳池中游泳

    图论刷题 机器人的运动范围 矩阵中的路径 图像渲染 水位上升的泳池中游泳 778. 水位上升的泳池中游泳 力扣原题 地址 难度与标签 困难难度 深度优先遍历 广度优先遍历 并查找 题目描述 在一个 n ...

  8. java人员安排表_Java实现 LeetCode 732 我的日程安排表 III(暴力 || 二叉树)

    732. 我的日程安排表 III 实现一个 MyCalendar 类来存放你的日程安排,你可以一直添加新的日程安排. MyCalendar 有一个 book(int start, int end)方法 ...

  9. 用Java输出高频词_Java实现 LeetCode 692 前K个高频单词(map的应用)

    692. 前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: [&qu ...

最新文章

  1. 计算机艺术未来发展趋势,计算机技术对现代艺术设计的影响
  2. Facebook 开源标准卷积替代方案 OctConv
  3. 使用python画图表_利用Python绘制数据的瀑布图的教程
  4. Android获取手机及外设存储空间
  5. DP备份任务失败原因解析
  6. 【活动(北京)】Global Azure Bootcamp
  7. python地板除与除法的区别_“地板除”还是“取整除”?地板除和天花板除floor division和ceil devision...
  8. [css] 举例说明实现圆角的方式有哪些?
  9. java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...
  10. android fragment学习6--FragmentTabHost底部布局
  11. python批量修改文件名加后缀_python文件操作之批量修改文件后缀名的方法
  12. win10计算器rsh_win10计算器rsh_如何打开win10计算器 教你打开win10计算器的方法
  13. matlab 对话框大小调整,matlab界面设计---对话框设计
  14. 古琴入门-古琴十大名曲-古琴教学——唐畅古琴
  15. 项目研发管理经验交流
  16. ax的范数最大_各类范数定义
  17. ps -ef中的e、f是什么含义
  18. JDK的最新版的下载与安装
  19. ECCV 2020 论文大盘点-手势估计篇
  20. 台式如何看计算机配置,电脑组装教程:怎么看电脑配置?教你如何查看电脑配置...

热门文章

  1. 阿里巴巴微服务开源项目盘点(持续更新)
  2. 2019阿里云开年Hi购季云通信分会场全攻略!
  3. 如何合理的规划jvm性能调优
  4. 深度学习之优化详解:batch normalization
  5. 银行业AI:炒作背后的现实——“尽管对新技术感到兴奋,但银行业态度非常谨慎”
  6. 内含福利|CSDN携手字节跳动:云原生Meetup北京站报名热烈启动,1月8日见!
  7. 新云网、5G、Wi-Fi 6 Plus,探秘2021通信展上的锐捷网络黑科技
  8. OpenStack管理界面开源啦!
  9. 漫画 | 程 序 员 脱 单 指 南
  10. AI赋能红外测温助力精准防控疫情……