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

文章目录

    • 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阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

nyoj_66_分数拆分_201312012122

分数拆分 时间限制&#xff1a;3000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;1描述现在输入一个正整数k,找到所有的正整数x>y,使得1/k1/x1/y. 输入第一行输入一个整数n,代表有n组测试数据。 接下来n行每行输入一个正整数k输出按顺序输出对应每行的k找…

pycharm快捷键、常用设置、配置管理

内容包含&#xff1a; pycharm学习技巧 Learning tips PyCharm3.0默认快捷键(翻译的) pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能&#xff1a;pycharm中清除已编译.pyc中间文件 python2转python3最快方式 [pycharm版本控制和数据库管理][PyCharm中的那些实用功…

逻辑回归-分类算法

目录 逻辑回归-分类算法 1 概述 2 sigmoid函数 3 逻辑回归公式 4 逻辑回归的损失函数 5 均方误差与对数自然损失对比 6 sklearn逻辑回归API 7 案例 8 总结 逻辑回归-分类算法 1 概述 逻辑回归&#xff08;Logistic Regression&#xff09;&#xff0c;简称LR。它的特…

LeetCode 1220. 统计元音字母序列的数目(DP)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n&#xff0c;请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串&#xff1a; - 字符串中的每个字符都应当是小写元音字母&#xff08;a, e, i, o, u&#xff09; - 每个元音 a 后面都只能跟着 e - 每个元音 e 后面…

专著出版成本计算

最近有个老师要出版专著&#xff0c;顺便查了下出版的成本组成&#xff0c;网络上总结整理&#xff0c;基本详细。之前也出版了一本教材&#xff0c;所以认识电子工业出版社的编辑&#xff0c;有需要的也可以联系我。 编写教材的话出版社看上了之后自己是不需要出钱的&#xff…

Django视图(python函数)

1.视图 视图负责接受Web请求HttpRequest&#xff0c;进行逻辑处理&#xff0c;返回Web响应HttpResponse给请求者响应可以是一张网页的HTML内容&#xff0c;一个重定向&#xff0c;一个404错误等 视图就是python中的函数视图一般被定义在“应用/views.py”文件中 视图的第一个…

非监督学习

非监督学习 1 什么是非监(unsupervised learning)督学习 无监督学习&#xff0c;就是不受监督的学习&#xff0c;一种自由的学习方式。该学习方式不需要先验知识进行指导&#xff0c;而是不断地自我认知&#xff0c;自我巩固&#xff0c;最后进行自我归纳&#xff0c;在机器学…

LeetCode 1250. 检查「好数组」(set / 最大公约数)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums&#xff0c;你需要从中任选一些子集&#xff0c;然后将子集中每一个数乘以一个 任意整数&#xff0c;并求出他们的和。 假如该和结果为 1&#xff0c;那么原数组就是一个「好数组」&#xff0c;则返回 True&#xff1…

js中this和回调方法循环-我们到底能走多远系列(35)

我们到底能走多远系列&#xff08;35&#xff09; 扯淡&#xff1a; 13年最后一个月了&#xff0c;你们在13年初的计划实现了吗&#xff1f;还来得及吗&#xff1f; 请加油~ 主题&#xff1a; 最近一直在写js&#xff0c;遇到了几个问题&#xff0c;可能初入门的时候都会遇到吧…

用户画像系统

用户画像系统 1 用户画像概述 1.1 什么是用户画像 用户画像就是对现实世界中用户的数学建模。现实世界的用户通过自己各种各样的行为&#xff0c;浏览购买&#xff0c;或者收藏&#xff0c;等等这些行为会把自己的兴趣爱好等体现在这些行为中&#xff0c;比如喜欢看书就会有…

编程思想:面向对象和面向过程

何谓面向对象&#xff1f;何谓面向过程&#xff1f;对于这编程界的两大思想&#xff0c;一直贯穿在我们学习和工作当中。我们知道面向过程和面向对象&#xff0c;但要让我们讲出来个所以然&#xff0c;又感觉是不知从何说起&#xff0c;最后可能也只会说出一句就是那样啦&#…

LeetCode 1210. 穿过迷宫的最少移动次数(状态压缩BFS)

文章目录1. 题目2. 解题1. 题目 你还记得那条风靡全球的贪吃蛇吗&#xff1f; 我们在一个 n*n 的网格上构建了新的迷宫地图&#xff0c;蛇的长度为 2&#xff0c;也就是说它会占去两个单元格。 蛇会从左上角&#xff08;(0, 0) 和 (0, 1)&#xff09;开始移动。 我们用 0 表示…

读书笔记2013第18本:《像外行一样思考,像专家一样实践》

这本书是在看《暗时间》时收集到的&#xff0c;书的副标题是科研成功之道&#xff0c;自己是个信息工作者&#xff0c;也号称科研工作者&#xff0c;虽然经常忙着一些杂活&#xff0c;没有时间认真思考和做实验。但从中找点立项、研究、演讲、总结的经验也是有益的。这本书的目…

Django模板(编写html代码

1.模板 用于编写html代码&#xff0c;还可以嵌入模板代码更快更方便的完成页面开发&#xff0c;再通过在视图中渲染模板&#xff0c;将生成最终的html字符串返回给客户端浏览器 模版致力于表达外观&#xff0c;一个视图可以使用任意一个模板&#xff0c;一个模板可以供多个视图…

用户画像之Spark ML实现

用户画像之Spark ML实现 1 Spark ML简单介绍 Spark ML是面向DataFrame编程的。Spark的核心开发是基于RDD&#xff08;弹性分布式数据集&#xff09;&#xff0c;但是RDD&#xff0c;但是RDD的处理并不是非常灵活&#xff0c;如果要做一些结构化的处理&#xff0c;将RDD转换成…

EBS业务学习之应收管理

Oracle Receivable 是功能完备地应收款管理系统&#xff0c;它能够有效地管理客户、发票和收帐过程&#xff0c;因此是财务模块的重要组成部分&#xff0c;是财务系统中较为核心的模块之一。对于一个公司来说&#xff0c;是否能够与客户保持良好的跟踪&#xff0c;及时收取应收…

[Kaggle] Digit Recognizer 手写数字识别(神经网络)

文章目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址 相关博文&#xff1a; [Hands On ML] 3. 分类&#xff08;MNIST手写数字预测&#xff09; [Kaggle] Digit Recognizer 手写数字识别 1. baseline 导入包 import tensorflow as tf fr…

逻辑回归原理

逻辑回归原理 1 逻辑回归简介 logistic回归&#xff08;LR&#xff09;&#xff0c;是一种广义的线性回归分析模型&#xff0c;常用于数据挖掘&#xff0c;疾病预测&#xff0c;经济预测等方面。 优点&#xff1a;计算代价低&#xff0c;思路清晰易于理解和实现&#xff1b;…

Django中示例验证码的实现总结

验证码 在用户注册、登录页面&#xff0c;为了防止暴力请求&#xff0c;可以加入验证码功能&#xff0c;如果验证码错误&#xff0c;则不需要继续处理&#xff0c;可以减轻业务服务器、数据库服务器的压力。 1&#xff09;安装包Pillow3.4.1。 1pip install Pillow3.4.1点击查看…

java.lang.IllegalStateException: Not connected to server

在开发人际银行的时候 客户端smack老是出现如下错误: 12-09 13:00:37.115: E/AndroidRuntime(5221): FATAL EXCEPTION: Thread-1812-09 13:00:37.115: E/AndroidRuntime(5221): java.lang.IllegalStateException: Not connected to server.12-09 13:00:37.115: E/AndroidRuntim…