Leetcode 778 Swim in a Rising water

题是指什么时候你能从左上角游到右下角。第t分钟的时候,水的高度是t。grid[i][j]是海拔,只有当前水的高度没过海拔,我才能游。你可以往四个方向游泳。求问,最少第几分钟我能从左上角游到右下角(有一条路径)
从本质上是要求找到一个最小的h,使得从左上角走到右下角能游完
解题思路:二分答案,h的范围肯定是grid[0][0],到grid中的最大值,取定一个h,看能不能游完

bfs求解

class Solution {
public:int swimInWater(vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();int l = 0, r = 0;for(int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {r = max(r, grid[i][j]);}}while (l < r) {int mid = l + (r - l) / 2;if(bfs(mid, grid)) {r = mid;} else {l = mid + 1;}}return l;}using PII = pair<int, int>;bool bfs(int h, vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();queue<PII> q;int dk[] = {-1, 0, 1, 0, -1};if(grid[0][0] > h) {return false;}q.push({0,0});vector<vector<int>> vis(m, vector<int>(n, 0));vis[0][0] = true;while(q.size()) {auto node = q.front();q.pop();int x = node.first;int y = node.second;if(x == m - 1 && y == n - 1) {return true;} for(int i = 0; i < 4; i++) {int nx = x + dk[i];int ny = y + dk[i+1];if(nx >= 0 && nx < m && ny >= 0 && ny < n && !vis[nx][ny] && grid[nx][ny] <= h) {vis[nx][ny] = true;q.push({nx, ny});}}}return false;}};

dfs求解

class Solution {
public:int swimInWater(vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();int l = 0, r = 0;for(int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {r = max(r, grid[i][j]);}}while (l < r) {int mid = l + (r - l) / 2;vector<vector<int>> vis(m, vector<int>(n, 0));if(dfs(0, 0, mid, vis, grid)) {r = mid;} else {l = mid + 1;}}return l;}bool dfs(int x, int y, int h, vector<vector<int>>& vis, vector<vector<int>>& grid) {int m = grid.size();int n = grid[0].size();if(grid[x][y] > h) {return false;}if(x == m - 1 && y == n - 1) {return true;}vis[x][y] = 1;int dk[] = {-1, 0, 1, 0, -1};for(int i = 0; i < 4; i++) {int dx = x + dk[i];int dy = y + dk[i+1];if(dx >= 0 && dx < m && dy >= 0 && dy < n && !vis[dx][dy] && dfs(dx, dy, h, vis, grid)) {return true;} }return false;}};

算法复杂度O(mnlog(mn)), 空间复杂度O(mn)

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

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

相关文章

Ardusub中添加自定义控制器

1.建议保留原程序 复制ardupilot文件夹到当前目录&#xff0c;命名为ardupilot_ARDC cp -r ardupilot ardupilot_copy2.切换Sub-4.5版本 Sub-4.1版本libraries里没有AC_CustomControl文件夹&#xff0c;我们需要用到这个文件夹所以需要进行切换分支&#xff0c;在当前ardupi…

ReactPress:重塑内容管理的未来

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress&#xff1a;重塑内容管理的未来 在当今信息爆炸的时代&#xff0c;一个高效、易用的内容管理系统&#xff0…

云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例

云集电商&#xff0c;一家聚焦于社交电商的电商公司&#xff0c;专注于‘精选’理念&#xff0c;致力于为会员提供超高性价比的全品类精选商品&#xff0c;以“批发价”让亿万消费者买到质量可靠的商品。面对近年来外部环境的变化&#xff0c;公司对成本控制提出了更高要求&…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

三周精通FastAPI:36 OpenAPI 回调

官方文档&#xff1a; OpenAPI 回调 您可以创建触发外部 API 请求的路径操作 API&#xff0c;这个外部 API 可以是别人创建的&#xff0c;也可以是由您自己创建的。 API 应用调用外部 API 时的流程叫做回调。因为外部开发者编写的软件发送请求至您的 API&#xff0c;然后您的…

如何将现有VUE项目所有包更新到最新稳定版

更新有风险,Enter要谨慎!!! 要将项目中的所有 npm 包更新到最新稳定版&#xff0c;可以使用 npm-check-updates 工具。以下是具体步骤&#xff1a; 步骤一&#xff1a;安装 npm-check-updates 首先&#xff0c;全局安装 npm-check-updates 工具&#xff1a; npm install -g…

如何使用 C# 编写一个修改文件时间属性的小工具?

下面是简鹿办公一个用 C# 编写的简单工具&#xff0c;它可以批量修改文件的创建时间、最后访问时间和最后修改时间。我们将使用 .NET Framework 或 .NET Core 来实现这个功能。 完整示例代码 1. 创建一个新的 C# 控制台应用程序 您可以使用 Visual Studio 或 .NET CLI 创建一个…

使用PyQt5设计一个简易计算器

目录 设计UI图 代码 结果展示 设计UI图 代码 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import QFileDialog, QMainWindow, QMessageBox from untitled import Ui_MainWindow import sysclass…

动态规划-两个数组的dp问题——712.两个字符串的最小ASCII删除和

1.题目解析 题目来源 712.两个字符串的最小ASCII删除和——力扣 测试用例 2.算法原理 1.状态表示 由于如果直接求本题会发现无从下手&#xff0c;不妨根据正难则反的原理&#xff0c;反向求公共子序列的ASCII码最大值即可&#xff0c;于是就转化为求公共子序列的问题&#x…

elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法

elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法 试过网上其他方法&#xff0c;发现表单清空数据还是有问题&#xff0c;索性用下面方法解决: // 给弹框里面添加 v-ifvisible测试无问题&#xff0c;暂时先这样解决&#xff0c;如果有其他方法&#x…

基于Arduino的RGB灯按键控制

一.简介 通过按键控制RGB灯分别显示7种颜色&#xff1a;红 、绿、 蓝、 黄、 青、 紫、 白。 二.按键控制RGB灯原理 1)RGB全彩LED: LED由三个颜色分别为&#xff1a;红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff09;、蓝&#xff08;Blue&#xff09;的LED…

hive数据查询语法

思维导图 基本查询 基本语法 SELECT [ALL | DISTINCT] 字段名, 字段名, ... FROM 表名 [inner | left outer | right outer | full outer | left semi JOIN 表名 ON 关联条件 ] [WHERE 非聚合条件] [GROUP BY 分组字段名] [HAVING 聚合条件] [ORDER BY 排序字段名 asc | desc…

前端小知识:我居然没学会用 split 方法?!

小伙伴们&#xff0c;你们会用 JavaScript 的 split 方法吗&#xff1f;最近我才发现&#xff0c;原来我多年来一直没真正掌握它&#xff0c;结果在解题时被卡住了。所以今天&#xff0c;我决定好好整理一下这个方法的用法。 在讨论问题之前&#xff0c;先来看一下 split 的两种…

VTK知识学习(2)-环境搭建

1、c方案 1.1下载源码编译 官网获取源码。 利用Cmake进行项目构建。 里面要根据实际使用的情况配置相关的模块哟&#xff0c;这个得你自行研究下了。 CMAKEINSTALLPREFIX--这个选项的值表示VTK的安装路径&#xff0c;默认的路径是C:/Program Files/VTK。该选项的值可不作更…

Halcon 从XML中读取配置参数

1、XML示例 以下是一个XML配置文件的示例,该文件包含了AOI(自动光学检测)算法的环境参数和相机逻辑参数: <AOI><!--AOI算法参数 20241106--><Env><!--环境参数--><Param name="GPUName" value="NVIDIA GeForce RTX 405…

SQL--查询连续三天登录数据详解

问题&#xff1a; 现有用户登录记录表&#xff0c;请查询出用户连续三天登录的所有数据记录 id dt1 2024-04-25 1 2024-04-26 1 2024-04-27 1 2024-04-28 1 2024-04-30 1 2024-05-01 1 2024-05-02 1 2024-05-04 1 2024-05-05 2 20…

结构方程、生物群落、数据统计、绘图分析在生态领域的应用

R语言结构方程模型&#xff08;SEM&#xff09;在生态学领域中的实践应用 结构方程模型&#xff08;Sructural Equation Model&#xff09;是一种建立、估计和检验研究系统中多变量间因果关系的模型方法&#xff0c;它可以替代多元回归、因子分析、协方差分析等方法&#xff0…

vue使用canves把数字转成图片验证码

<canvas id"captchaCanvas" width"100" height"40"></canvas>function drawCaptcha(text) {const canvas document.getElementById(captchaCanvas);const ctx canvas.getContext(2d);// 设置背景颜色ctx.fillStyle #f0f0f0;ctx.f…

双指针算法习题解答

1.移动零 题目链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a;该题要求将数组中为0的元素全部转移到数组的末尾&#xff0c;同时不能改变非零元素的相对位置。 解题思路&#xff1a;我们可以用变量dest和cur将该数组分为三个区域。…

「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用

自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件&#xff0c;鸿蒙应用能够提高代码的可维护性&#xff0c;并简化复杂布局的构建。本篇将介绍如何创建自定义组件&#xff0c;如何向组件传递数据&#xff0c;以及如何在不同页面间复用这些组件。 关键…