文章目录

  • 1. 题目
  • 2. 解题

1. 题目

在一个 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最终的路线用加粗进行了标记。
我们必须等到时间为 16,此时才能保证平台 (0, 0) 和 (4, 4) 是连通的

提示:
2 <= N <= 50.
grid[i][j] 位于区间 [0, ..., N*N - 1] 内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swim-in-rising-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 1102. 得分最高的路径(优先队列BFS/极大极小化 二分查找)

跟上面题目一样,这题是找到 路径最大值 最小的路径,只需要在二分查找的地方做点修改

class Solution {vector<vector<int>> dir = { {1,0},{0,1},{0,-1},{-1,0}};int N;
public:int swimInWater(vector<vector<int>>& grid) {int l = grid[0][0], r = 2500, mid, ans;N = grid.size();while(l <= r){mid = (l + r) / 2;vector<vector<bool>> vis(N, vector<bool>(N,false));if(dfs(grid,0,0, mid, vis)){    //可以找到一条路径,其上的值都 <= midans = mid;r = mid-1;}elsel = mid+1;}return ans;}bool dfs(vector<vector<int>>& grid, int x, int y, int MAX, vector<vector<bool>>& vis){vis[x][y] = true;int i, j, k;if(x == N-1 && y == N-1){return true;}for(k = 0; k < 4; k++){i = x + dir[k][0];j = y + dir[k][1];if(i >=0 && i < N && j >=0 && j < N && !vis[i][j] && grid[i][j] <= MAX){if(dfs(grid, i, j, MAX, vis))return true;}}return false;}
};

36 ms 9.7 MB

优先队列也可以

struct point
{int x;int y;int val;point(int x0, int y0, int v){x = x0;y = y0;val = v;}
};
struct cmp
{bool operator()(point& a, point& b) {return a.val > b.val;//值小的优先}
};
class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};
public:int swimInWater(vector<vector<int>>& A) {int m = A.size(), n = A[0].size(), i, j, x, y, k, ans = A[0][0];vector<vector<bool>> visited(m, vector<bool>(n,false));visited[0][0] = true;priority_queue<point,vector<point>,cmp> q;q.push(point(0, 0, A[0][0]));while(!q.empty()){if(q.top().val > ans)ans = q.top().val;i = q.top().x;j = q.top().y;q.pop();if(i==m-1 && j==n-1)return ans;for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && !visited[x][y]){q.push(point(x, y, A[x][y]));visited[x][y] = true;}}}return ans;}
};

52 ms 8.5 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

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

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

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

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

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

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

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

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

    在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度. 现在开始下雨了.当时间为 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. LeetCode 729. 我的日程安排表 I(set 二分查找)

    文章目录 1. 题目 2. 解题 2.1 set 二分查找 2.2 差分思想 1. 题目 实现一个 MyCalendar 类来存放你的日程安排.如果要添加的时间内没有其他安排,则可以存储这个新的日程安 ...

  9. cuda中的二分查找

    使用背景 通常,在做高性能计算时,我们需要随机的连接某些点.这些点都具有自己的度量值,显然,度量值越大的值随机到的概率就会越大.因此,采用加权值得方法: void getdegreeSum(DG *g ...

最新文章

  1. 为了读懂你,AI究竟有多努力?
  2. Ubuntu下开启SSH服务
  3. Spring使用支付宝扫码支付
  4. 【PC工具】大神开源项目-配色调色工具Colorpicker颜色选择器
  5. 数字图像处理小练习存档1
  6. Flutter路由管理代码这么长长长长长,阿里工程师怎么高效解决?(实用)
  7. 语言 ota_新增飞屏功能 ARCFOX αT首次OTA升级
  8. UML:图的分类及作用(共5类图,有9种图形)
  9. mysql通过日志恢复数据_mysql通过binlog日志来恢复数据
  10. GitHub 的 12 个实用技巧,你 get 了几个?
  11. 【HTML】【简易电子相册】overflow:hidden;
  12. Ubuntu 朗文不发音问题
  13. Windows 平台下 LiteIDE 的安装和使用
  14. html 引入 svg矢量图,前端可视化——SVG矢量图技术
  15. 一行代码学会Java--2.用IDEA神器编写“你好,Java”
  16. 【科技检索报告】基于大规模浮动车GPS数据的实时地图匹配方法
  17. ftp服务器在线编辑,ftp服务器上怎么直接修改office文档.
  18. OPENWRT修改网卡MAC地址
  19. Error —— 单元测试中如何Mock application文件中的数据?
  20. CentOS /Linux 开放80、8080端口或者开放某个端口

热门文章

  1. mac安装完mysql后关机特别慢_mysql-Mac终端下遇到的问题总结
  2. 逻辑综合工具DesignCompiler使用教程
  3. Windows 下 Python 环境搭建
  4. java 最优化_java-多维度求最优解
  5. 第三季2:ORTP库的源码分析、RTP发送实验的源码分析
  6. MySQL和Mariadb都启动不了了_linux centos7mariadb安装成功启动不了 解决思路
  7. JAVA开发工具下载
  8. hive三种调用方式
  9. 微信小程序--数据存储
  10. RISC-V踩坑记----__builtin_clz((x)库函数的应用