news 2026/4/3 5:08:04

轰炸敌人,最多可以摧毁的敌人城堡数目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
轰炸敌人,最多可以摧毁的敌人城堡数目

我的解法:

对于每一个空位置,进行一次bfs,从上下左右四个方向去寻找,这是岛屿问题的相似处理,但是这个题可以优化,因为横竖方向可以进行动规优化。

我们不需要对每个0都重新数一遍它所在的行和列有多少敌人。

  • :对于同一行里、两个墙之间的所有格子,它们能炸到的“行敌人”数量是一样的。我们只在行的开头或者刚经过一个墙之后,重新计算当前这段的敌人数量。

  • :同理,对于同一列里、两个墙之间的所有格子,它们能炸到的“列敌人”数量也是一样的。我们可以用一个数组colHits[]来缓存每一列当前段的敌人数量。

#include <vector> #include <algorithm> using namespace std; class Solution { public: int maxKilledEnemies(vector<vector<char>>& grid) { if (grid.empty() || grid[0].empty()) return 0; int m = grid.size(); int n = grid[0].size(); int result = 0; int rowHits = 0; // 缓存当前行这一段(两墙之间)的敌人数量 vector<int> colHits(n, 0); // 缓存每一列当前段的敌人数量 for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { // 1. 处理行:如果是行的开头,或者前一个是墙,就需要重新统计这一段行里的敌人 if (j == 0 || grid[i][j-1] == 'W') { rowHits = 0; // 向右扫描直到碰到墙或边界 for (int k = j; k < n && grid[i][k] != 'W'; ++k) { if (grid[i][k] == 'E') rowHits++; } } // 2. 处理列:如果是列的开头,或者上面一个是墙,就需要重新统计这一段列里的敌人 if (i == 0 || grid[i-1][j] == 'W') { colHits[j] = 0; // 向下扫描直到碰到墙或边界 for (int k = i; k < m && grid[k][j] != 'W'; ++k) { if (grid[k][j] == 'E') colHits[j]++; } } // 3. 只有当前位置是空位 '0' 时,才能放炸弹 if (grid[i][j] == '0') { result = max(result, rowHits + colHits[j]); } } } return result; } };

2511. 最多可以摧毁的敌人城堡数目

e摧毁的敌人城堡数目,所以我们返回 4 。
class Solution { public: int captureForts(vector<int>& forts) { int res = 0; int pre = -1; // 表示不存在 for(int i = 0; i < forts.size(); i++) { if(forts[i] != 0) { if(pre >= 0 && forts[i] != forts[pre]) // 1 和 -1 或者 -1 和 1出现 res = max(res, i - pre - 1); pre = i; } } return res; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/26 18:59:51

全国逛同一座城?我们都活在“复制粘贴”的模块化世界里

全国逛同一座城&#xff1f;我们都活在“复制粘贴”的模块化世界里 目录 全国逛同一座城&#xff1f;我们都活在“复制粘贴”的模块化世界里&#x1f50d; 看懂“复制粘贴”的本质&#xff1a;不是巧合&#xff0c;是底层逻辑的必然&#x1f4a1; 普通人如何透过现象看本质&…

作者头像 李华
网站建设 2026/3/16 22:00:26

短视频平台php源码,字符缓冲流的特有功能

短视频平台php源码&#xff0c;字符缓冲流的特有功能 一、字符缓冲流的特有功能 void newLine() 换行操作&#xff1a; 三个步骤: write;newLine;flush; 当然最后close; public String readLine() 读一行,只读内容&#xff0c;不读换行的符号&#xff01;操作&#xff1a…

作者头像 李华
网站建设 2026/3/28 17:45:51

Win11 轻松设置更新暂停至 2042年告别过度弹窗 卸载系统冗余软件

时隔两年更新的Windows11 轻松设置 1.12 正式版&#xff0c;整合六大核心模块&#xff0c;一个工具就能替代多款零散小工具&#xff0c;Win11 系统优化、个性化设置全搞定&#xff0c;比单独用其他工具便捷太多&#xff01; 软件下载地址 软件功能清晰划分六大板块&#xff0c…

作者头像 李华
网站建设 2026/3/27 17:52:55

现在的00后,真是卷死了呀,想离职了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;刚开年我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 …

作者头像 李华
网站建设 2026/3/28 7:30:15

【CTF Writeup】Crypto题型之经典RSA算法破解全解析

引言 一、RSA基础原理回顾 RSA加密流程&#xff1a; 生成两个大质数p、q&#xff0c;计算n pq&#xff0c;φ(n) (p-1)(q-1)&#xff1b; 选择公钥e&#xff0c;满足1 < e < φ(n)且gcd(e, φ(n)) 1&#xff1b; 计算私钥d&#xff0c;满足e*d ≡ 1 mod φ(n)&…

作者头像 李华