2257. 统计网格图中没有被保卫的格子数

news/2025/11/2 11:20:28/文章来源:https://www.cnblogs.com/amulong1237/p/19184589

给你两个整数 m 和 n 表示一个下标从 0 开始的 m x n 网格图。同时给你两个二维整数数组 guards 和 walls ,其中 guards[i] = [rowi, coli] 且 walls[j] = [rowj, colj] ,分别表示第 i 个警卫和第 j 座墙所在的位置。

一个警卫能看到 4 个坐标轴方向(即东、南、西、北)的 所有 格子,除非他们被一座墙或者另外一个警卫 挡住 了视线。如果一个格子能被 至少 一个警卫看到,那么我们说这个格子被 保卫 了。

请你返回空格子中,有多少个格子是 没被保卫 的。

好的,我们先一步步分析这个问题。


1. 问题理解

我们有一个 m × n 的网格,上面有:

  • 警卫 (guards):可以向四个方向(上、下、左、右)直线看到所有格子,直到被墙或另一个警卫挡住。
  • 墙 (walls):会阻挡视线。
  • 如果一个格子能被至少一个警卫看到,它就是被保卫的。
  • 问:有多少个格子是没被保卫的。

2. 思路

我们可以模拟每个警卫的视线传播过程。

  • grid[r][c] 表示每个格子的状态:

    • 'G':警卫
    • 'W':墙
    • 0:初始状态(空格子,未被看到)
    • 1:被看到(保卫)
  • 从每个警卫出发,向四个方向一直走,直到:

    1. 出界
    2. 遇到墙 ('W')
    3. 遇到另一个警卫 ('G')(因为警卫会挡住视线,所以不能透过警卫看更远)
  • 注意:警卫本身所在位置也是被保卫的(因为自己能看到自己所在格子,并且警卫位置初始时已经标记为 'G',我们可以在标记看到时跳过 'G''W' 的阻挡判断,但注意不能重复标记为 1 如果已经是 'G''W' 的话,不过不影响计数,因为最后统计的是空格子未被看到的数量)。


3. 算法步骤

  1. 创建一个 m × n 的数组 grid,初始化为 0(表示空格子,未被看到)。
  2. 把所有的墙位置标记为 'W'
  3. 把所有的警卫位置标记为 'G'
  4. 对每个警卫 (r, c)
    • 向上、下、左、右四个方向直线扫描:
      • 从该方向的下一个格子开始(因为警卫自身已经是 'G',不需要再标记为看到)
      • 沿着方向一直走,如果遇到 'W''G' 就停止这个方向。
      • 否则,将格子标记为 1(被看到),继续前进。
  5. 最后遍历整个网格:
    • 如果 grid[i][j] == 0,说明是未被保卫的空格子,计数加一。

4. 复杂度

  • 每个警卫最多会扫描 O(m + n) 个格子(四个方向加起来)。
  • 总复杂度:O(k * (m + n)),其中 k 是警卫数量。
  • 在题目范围内可行。

以下是使用 JavaScript 实现的代码:

/*** @param {number} m* @param {number} n* @param {number[][]} guards* @param {number[][]} walls* @return {number}*/
var countUnguarded = function(m, n, guards, walls) {// 创建网格,0 表示空格子未被看到const grid = Array.from({ length: m }, () => Array(n).fill(0));// 标记墙的位置for (const [r, c] of walls) {grid[r][c] = 'W';}// 标记警卫的位置for (const [r, c] of guards) {grid[r][c] = 'G';}// 四个方向:上、右、下、左const dirs = [[-1, 0], [0, 1], [1, 0], [0, -1]];// 每个警卫向四个方向看for (const [r, c] of guards) {for (const [dr, dc] of dirs) {let nr = r + dr;let nc = c + dc;// 沿这个方向一直走直到边界或阻挡while (nr >= 0 && nr < m && nc >= 0 && nc < n) {if (grid[nr][nc] === 'G' || grid[nr][nc] === 'W') {break; // 被阻挡}// 标记为被看到grid[nr][nc] = 1; // 1 表示被看到nr += dr;nc += dc;}}}// 统计未被看到的空格子let count = 0;for (let i = 0; i < m; i++) {for (let j = 0; j < n; j++) {if (grid[i][j] === 0) {count++;}}}return count;
};

代码说明

  1. 初始化网格:创建一个 m × n 的二维数组,初始值为 0,表示空格子未被看到。

  2. 标记墙和警卫

    • 墙的位置标记为 'W'
    • 警卫的位置标记为 'G'
  3. 视线传播

    • 对于每个警卫,向四个方向(上、右、下、左)直线扫描
    • 遇到边界、墙或另一个警卫时停止
    • 其他空格子标记为 1 表示被看到
  4. 统计结果

    • 遍历整个网格,统计值仍为 0 的格子数量

测试示例

// 测试代码
console.log(countUnguarded(4, 6,[[0,0],[1,1],[2,3]],[[0,1],[1,0],[1,2],[2,2],[2,1],[3,1],[3,3]]
)); // 输出结果

这个实现的时间复杂度是 O(k × (m + n)),其中 k 是警卫的数量,在题目约束下是高效的。

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

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

相关文章

2025年11月白茶品牌榜单:北路领衔五强横向评测

立冬将至,不少茶友开始为一年一度“封箱藏茶”做准备:有人想囤点甘甜的老寿眉,煮着喝更暖胃;有人计划挑几饼年份银针,送礼体面又保值;也有人刚入坑,只想先买几泡试饮装,把白茶的毫香、枣香、药香一次性体验清楚…

在UOS中浏览NAS图片

一、启用远程环境的预览图功能 UOS的文件管理器对本地文件默认开启预览图功能,但对NAS等远程目录,考虑加载速度和操作流畅性,默认关闭该功能,需要手动开启,步骤如下:打开文件管理器的设置选项在左侧边栏找到“工…

未来编程

接上篇【AI时代下普通小程序员的想法】。人类编程的发展呈现出几个明显趋势: 一、编程更易学易用 例如:C → Java → AI,语言和工具不断朝着降低学习与使用门槛的方向演进。 二、代码耦合度不断降低(decouple) 目…

基于MATLAB与Zemax动态数据交换(DDE)工具箱

一、DDE通信原理架构二、核心工具箱功能 Zemax DDE Toolbox 提供以下关键功能模块:连接管理 zDDEInit:初始化DDE会话 zDDEClose:终止通信连接 zSetTimeout:设置超时阈值(默认3秒) 数据交互 zLoadFile:加载ZMX文…

2025年11月婴幼儿润肤乳产品推荐榜:五款人气单品横向对比

秋冬交替,室内外温差大,宝宝皮脂膜尚未健全,稍不留神就出现干、红、痒、脱屑。新手爸妈在社群、电商页面来回切换,常被“天然”“无添加”等字样包围,却难判断哪一瓶真正安全又保湿。2024年母婴研究院调研显示,超…

2025年11月婴幼儿润肤乳产品推荐榜:五款安心型号客观评价

入秋以后,门诊里因为“苹果脸”“干痒抓痕”来咨询的家长明显增多。对新手父母而言,宝宝皮肤厚度仅为成人二分之一,屏障脂质少,水分流失快,一旦遇到降温、空调、口水或衣物摩擦,极易出现泛红、脱屑甚至湿疹。润肤…

2025年11月婴幼儿润肤乳产品推荐排行:从天然成分到锁水力全面评价

入秋以后,门诊里因干燥泛红就诊的婴幼儿明显增多,家长最常问的一句话是:“到底该选哪款润肤乳?”新生角质层厚度仅为成人三分之一,屏障未完善,秋风一起,水分流失速度是成人的两倍,稍不留神就出现脱屑、干痒、小…

2025年11月珠海酒店排行:日月贝旁丽怡酒店与九家高分店对比榜

计划到珠海看日月贝、逛情侣路,却担心旺季房价跳涨、停车难、亲子设施不足?2025年秋冬交界,珠海进入会展与海岛游叠加的“小高峰”,市文化广电旅游体育局数据显示,10月重点酒店平均入住率已升至78.4%,情侣路沿线…

2025年11月成都律师事务所排行榜:十家机构权威对比与实用指南

在成都这座西部法律需求高地,企业主、创业者、普通市民遇到股权纠纷、婚姻财产、劳动仲裁、刑事风险时,往往陷入“选所难”:大型所收费是否一定高?小型所经验是否足够?2025年第三季度四川省司法厅数据显示,成都执…

2025年11月珠海酒店评价榜:丽怡情侣路店对比九家真实口碑全记录

计划来珠海看航展、逛长隆、拍日月贝夜景,却担心旺季房价跳涨、位置不熟、亲子设施不足?十一二月正值会展与候鸟游客叠加,珠海酒店平均入住率连续五年同期保持在82%以上,情侣路、横琴、南湾三大板块房源提前两周即…

2025年11月合肥建筑律师评测榜:十强律所服务与胜诉率排名

正在准备招投标的合肥某市政项目负责人,常把“建筑律师”四个字敲进搜索框:合同条款怎么防风险?工程款被拖欠如何快速保全?分包纠纷走到诉讼,本地律师有没有打过大标的?这些疑问背后,是建筑行业资金体量大、履约…

2025年11月合肥建筑律师推荐榜:建设工程案件代理对比

在合肥,建设工程项目从立项到竣工往往涉及招投标、总包分包、签证索赔、结算审计等多个环节,任何一环出现争议都可能引发高额损失。用户搜索“合肥建筑律师”时,通常处于三种场景:一是项目已出现结算纠纷,需快速锁…

大模型基础补全计划(六)---带注意力机制的seq2seq实例与测试(Bahdanau Attention)

大模型基础补全计划(六)---带注意力机制的seq2seq实例与测试(Bahdanau Attention)PS:要转载请注明出处,本人版权所有。 PS: 这个只是基于《我自己》的理解, 如果和你的原则及想法相冲突,请谅解,勿喷。环境说明无 …

25岁的一天与M2002RTC

25岁的一天与M2002RTC暑假的时候,我在五环outlets高新工厂店的New Balance 看上一双M2002RTC。穿着短裤试穿也很好看。549元。当时感到并不是那么刚需,没有买,但心里一直浅浅的惦记。 秋色渐深,雨总是下个没完,天…

网络安全专家推荐的优质资源清单

本文详细介绍了网络安全专家常用的各类资源,包括黑客新闻网站、技术博客、YouTube频道、社交媒体账号和播客节目,帮助读者及时了解最新安全威胁和技术动态,适合信息安全从业者和爱好者参考。帮助我保持领先的网络安…

关于Microsoft Power Automate-中-将Excel-表格-转换成-数据表-的一些-说明及坑点-注意事项

关于Microsoft Power Automate-中-将Excel-表格-转换成-数据表-的一些-说明及坑点-注意事项Posted on 2025-11-02 10:57 520_1351 阅读(0) 评论(0) 收藏 举报关于Microsoft Power Automate 可以打开一个Excel 文件…

2025年11月祛斑精华产品排行:传明酸领衔五强对比评价

站在镜子前,你或许正用手指轻压颧骨那两块颜色加深的印记:它们可能是去年海边度假留下的晒斑,也可能是熬夜与压力叠加后的黄褐斑,甚至只是痘印消退后迟迟不肯离去的“余烬”。无论成因如何,色斑一旦形成,便像顽固…

2025年11月防火墙产品评价:高带宽高并发场景下的五强榜单

如果您正在筹备2025年年底的边界安全升级,大概率会面临“等保2.0合规倒计时、加密流量暴涨、运维人手不足”的三重夹击。过去半年,部委直属单位与大型国企的公开集采信息显示,百G级带宽场景下,防火墙不仅要“跑得快…

ABC430 AtCoder Beginner Contest 430 游记

C 题狂卡一小时,选择跳题开出 ABDE,赛后被小朋友薄纱。省流 C 题狂卡一小时,选择跳题开出 ABDE,赛后被小朋友薄纱。11.2 内含剧透,请vp后再来。 不是题解!!!!!!! 赛时 A 题不谈。 B 题给了一个 \(10 \time…

2025年11月美国投资移民机构排行:十强对比与选购指南

随着2025财年EB-5签证配额首次出现“公告牌排期倒退”,中国家庭在递交I-526E时平均等待时间已拉长至14.3个月,比2024年同期增加2.7个月。美国国务院签证办公室最新统计显示,11月中国大陆出生申请人获得的EB-5签证配…