【LeetCode】每日一题 2023_11_9 逃离火灾(bfs 练习)

news2024/11/28 8:39:44

文章目录

  • 刷题前唠嗑
  • 题目:最长平衡子字符串
    • 题目描述
    • 代码与解题思路
    • 偷看大佬题解
  • 结语

刷题前唠嗑


LeetCode? 启动!!!

嗯?什么?今天是 hard?陷入沉思。。。先看看题吧

题目:最长平衡子字符串

题目链接:2258. 逃离火灾

题目描述


这题目可太长啦,不过题意还是挺好理解滴

代码与解题思路

type pair struct { x, y int }
var dir = []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}

func maximumMinutes(grid [][]int) int {
    m, n := len(grid), len(grid[0])
    // bfs 函数:取三个数, 到达安全屋/安全屋上边/安全屋左边
    bfs := func(q []pair) (int, int, int) {
        time := make([][]int, m)
        for i, _ := range time { // 给 time 数组赋值为 -1
            time[i] = make([]int, n)
            for j, _ := range time[i] {
                time[i][j] = -1 // 表示未访问该点
            }
        }
        for _, v := range q { // 设置起点
            time[v.x][v.y] = 0
        }
        for t := 1; len(q) > 0; t++ {
            tmp := q
            q = nil
            for _, v := range tmp {
                for _, v2 := range dir {
                	// x, y 设置偏移量, 然后控制边界, grid == 0 表示能走(不是墙), time < 0 也就是 == -1 表示未访问该节点
                    if x, y := v.x+v2.x, v.y+v2.y; x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 0 && time[x][y] < 0 { 
                        time[x][y] = t
                        q = append(q, pair{x, y}) // 需要 bfs 的新坐标起点
                    }
                }
            }
        }
        return time[m-1][n-1], time[m-1][n-2], time[m-2][n-1]
    }

    manToHouseTime, m1, m2 := bfs([]pair{{0, 0}})
    if manToHouseTime < 0 { // 人能否到安全屋
        return -1
    }

    firPos := []pair{}
    for i, row := range grid { // 收集火的位置
        for j, x := range row {
            if x == 1 {
                firPos = append(firPos, pair{i, j})
            }
        }
    }
    fireToHouseTime, f1, f2 := bfs(firPos)
    if fireToHouseTime < 0 { // 火能否到安全屋
        return 1_000_000_000
    }

    d := fireToHouseTime - manToHouseTime 
    if d < 0 { // 火到安全屋的时间是否比人快
        return -1
    }

    // 如果人需要从上面或左边进入安全屋, 与火到这两个位置的时间进行比较
    if m1 != -1 && m1+d < f1 || m2 != -1 && m2+d < f2 { 
        return d
    }
    return d-1
}

我就非常朴素的把题目翻译了一遍,算是模拟题意吧,具体是这样的:

首先需要分析的就是,火和人一起走向安全屋,如果火到安全屋的上面或者左边之后,人就进不了安全屋了,所以我们在进行 bfs 搜索最短路的时候需要返回 安全屋/安全屋上面/安全屋左边 这几个位置,考虑火把人进入安全屋的路径挡住的情况

  1. 首先 bfs 人,查看是否能进安全屋,如果不能就返回 -1
  2. 然后遍历地图,收集火的位置
  3. 然后 bfs 火,查看火能否进安全屋,如果不能就返回 1_000_000_000
  4. 然后判断火到安全屋的时间是否比人快,如果比人快就返回 -1
  5. 最后判断火是否会到安全屋的上方或左方对人进入安全屋造成影响,如果有影响就让人少等一分钟,提前进安全屋,如果没影响就正常返回前往安全屋的时间

按照这个思路一步步走,最后结果没什么问题

偷看大佬题解

emmm

二分查找,我去看了看,我尝试理解,理解失败。。。开摆,今天就到这里吧~

结语

今天的每日一题就当是练习 bfs 啦

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

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

相关文章

【面经】如何查看服务器内存和磁盘空间占用

查看服务器内存占用 free -g查看服务器磁盘空间占用 df -h

基于React开发的chatgpt网页版(仿chatgpt)

在浏览github的时候发现了一个好玩的项目本项目&#xff0c;是github大神Yidadaa开发的chatgpt网页版&#xff0c;该开源项目是跨平台的&#xff0c;Web / PWA / Linux / Win / MacOS都可以访问。非常有意思&#xff0c;本人就部署了一套&#xff0c;喜欢的同学可以体验一番。 …

一篇文章揭秘JetBrains的 AI 图形发展历程

JetBrains IDE正式版下载 JetBrains 不断完善用作网站元素和发布图形的图稿创建方式&#xff0c;使命是将平面设计师从日常任务中解放出来&#xff0c;让他们能够专注于自己的核心能力 – 创造力&#xff0c;JetBrains 用于生成图稿的内部工具的历史大约开始于十年前。起初主要…

Web APIs——BOM和延迟函数setTimeout

1、window对象 1.1 BOM&#xff08;浏览器对象模型&#xff09; BOM&#xff08;Browser Object Model&#xff09;是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xf…

用POST请求在Linux之间传输文件(Python在Linux间传输文件)

背景 实际需求&#xff1a; 已通过iperf和dd命令测试过两台不同区域之间的Linux服务器带宽&#xff0c;均为1000Mb网络。但发送post请求传输文件至对象存储时&#xff0c;总是卡在14Mb/s。除了排查区域之间的防火墙&#xff0c;也应该尝试检查Linux&#xff08;KylinV10&…

家用AIO系统架构图(Openwrt 群晖 IPV6 DDNS)

折腾几个月了&#xff0c;摸索出的最合适的系统架构。其余的系统架构也都行得通&#xff0c;但是从逻辑角度&#xff0c;下列方案更加的自然通顺。 系统架构图 疑问解答 为什么用IPV6? 2222年了都不会真有人能从运营商哪里搞到ipv4或者还没有ipv6吧。 光猫为什么桥接? 抠门运…

Maven-构建生命周期与插件

一、概念和基础 Maven针对项目的构建和发布定义了一系列明确的步骤&#xff0c;根据作用不同这些步骤分属于不同的生命周期。Maven针对每个步骤都有对应的默认插件&#xff0c;Maven在构建过程中是通过调用这些插件完成整个过程的。开发者只需要通过简单的命令就可以驱动maven…

layui table合计 totalRow 保留4位小数\ 异步请求数据的表格 新增行之后 如何更新数据

layui table合计 totalRow 保留4位小数: 例: totalRowMethod:(column: any, dataSource: any[]) > { let total 0; dataSource.forEach((item) > { total total Number(item[column.key]); …

公益理发暖人心,爱心助老绿萝先行

为更好地关爱老年人的生活&#xff0c;为老年人带来更实在的便利&#xff0c;2023年11月8日&#xff0c;绿萝志愿服务队从老人们的实际需求出发&#xff0c;在拱辰一街二社区开展关爱空巢老人助老志愿活动。 绿萝理发师志愿者们又一次来到老人们熟悉的场地&#xff0c;为老人们…

Qt 二维码生成与识别

1.简介 QZXing是一个基于Qt框架的二维码解码库&#xff0c;它是对ZXing&#xff08;Zebra Crossing&#xff09;开源项目的一个Qt封装。ZXing是一个功能强大的开源二维码解码库&#xff0c;支持多种类型的码&#xff0c;包括QR码、DataMatrix码、Aztec码等。 QZXing提供了一个…

PTA_乙级_1011

#include<iostream> using namespace std;int main(){long long A,B,C,T;// 注意AB如果特别大是可能超过int类型最大范围所以用longlong最好// 在C中&#xff0c;int 类型的范围通常是在-2147483648到2147483647之间&#xff0c;这是32位有符号整数的范围。// 在C中&…

软件开发项目文档系列之十四如何撰写系统试运行报告

目录 1 系统试运行的平台及网络环境1.1 系统软件平台1.2 系统网络环境 2 系统概要说明2.1 系统主要模块2.2 系统权限 3 系统试运行的工作时间3.1 集中培训时间3.2 系统试运行环境搭建3.3 系统试运行阶段 4 系统试运行的用户对象和受众范围5 系统试运行对提高工作效率的作用分析…

互联网企业该如何进行风险管理

谈到风险管理&#xff0c;首先我们应该了解如何评估威胁。 威胁可以根据攻击的类型和目标来分类。STRIDE是微软开发出来对计算机安全威胁进行分类的威胁建模系统。 STRIDE代表&#xff1a; 假冒篡改抵赖信息披露拒绝服务提升权限 假冒 即试图通过使用错误的ID访问某个系…

牛客网:链表分割

一、题目 函数原型&#xff1a; ListNode* partition(ListNode* pHead, int x) 二、思路 根据题意&#xff0c;可以设置两个新的链表&#xff0c;将原链表中所有小于x的结点链接到链表1中&#xff0c;大于x的结点链接到链表2中&#xff0c;最后再将两个链表合并即可。 此题有两…

HT4344 2通道 立体声 DAC转换器的特性

HT4344 2通道 立体声 DAC转换器的特性&#xff1a; 1.支持多种音频数字输入格式, 支持24-bit字节 2.可自动检测采样频率&#xff0c;Z高192kHz 3.105dB动态范围 4.-90dB THDN 5.集成多比特位的Δ-Σ调制器 6.支持3.3V/5V单电源供电 7.具有强抗时钟抖动能力 8.内部集成输…

ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校学生课堂考勤系统设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转…

【违规处罚工作公示】10月30日-11月5日

10月30日至11月5日期间&#xff0c;共计对64,852个违规账号进行了封禁&#xff0c;其中57,954个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

感恩同行 | 这个火鸡节,我们一起好好过

社区收过 NebulaGraph 明信片的小伙伴&#xff0c;可能最常见到的词汇便是&#xff1a;谢谢。谢谢你的到来&#xff0c;让这个社区变得更有意思&#xff0c;更加多元。恰好&#xff0c;我们可人贴心的海外小姐姐 wenting 想给国际友人们来一个火鸡派对&#xff0c;一起过个感恩…

【小黑嵌入式系统第八课】初识PSoC Creator™开发——关于PSoC Creator下载、创建项目、单片机中的hello world(点亮一个led)

上一课&#xff1a; 【小黑嵌入式系统第七课】PSoC 5LP 开发套件&#xff08;CY8CKIT-050B &#xff09;——PSoC 5LP主芯片、I/O系统、GPIO控制LED流水灯的实现 文章目录 一、关于PSoC Creator1、PSoC Creator简介2、下载 二、创建项目三、led闪烁项目 一、关于PSoC Creator …

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…