网易首页 > 网易号 > 正文 申请入驻

这以后谁还敢连公司Wifi。

0
分享至

最近在网上看到一张截图,一家公司通过网络统计了全公司平均工作占比,以及按时上线的准时率,还有工作期间大家都看了哪些网站,网友评论到以后谁还敢连接公司WiFi。

不过我知道公司是可以检测到你浏览了哪些网站,但我确实没注意,因为我经常在工作的时候没事也会看看招聘网站,以后我也要注意了。不过退一步来说就是看了,公司也不知道是谁看的,因为他不知道哪个连的是你的手机。这里也提醒大家工作时候尽量不要连公司wifi摸鱼。

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第1905题:统计子岛屿,难度是中等。

给你两个 m x n 的二进制矩阵 grid1 和 grid2 ,它们只包含 0 (表示水域)和 1 (表示陆地)。一个岛屿是由四个方向 (水平或者竖直)上相邻的 1 组成的区域。任何矩阵以外的区域都视为水域。

如果 grid2 的一个岛屿,被 grid1 的一个岛屿完全包含,也就是说 grid2 中该岛屿的每一个格子都被 grid1 中同一个岛屿完全包含,那么我们称 grid2 中的这个岛屿为子岛屿 。请你返回 grid2 中子岛屿的数目 。

示例1:


输入:grid1 = [[1,1,1,0,0],[0,1,1,1,1],[0,0,0,0,0],[1,0,0,0,0],[1,1,0,1,1]], grid2 = [[1,1,1,0,0],[0,0,1,1,1],[0,1,0,0,0],[1,0,1,1,0],[0,1,0,1,0]] 输出:3 解释:如上图所示,左边为 grid1 ,右边为 grid2 。 grid2 中标红的 1 区域是子岛屿,总共有 3 个子岛屿。

示例2:


输入:grid1 = [[1,0,1,0,1],[1,1,1,1,1],[0,0,0,0,0],[1,1,1,1,1],[1,0,1,0,1]], grid2 = [[0,0,0,0,0],[1,1,1,1,1],[0,1,0,1,0],[0,1,0,1,0],[1,0,0,0,1]] 输出:2 解释:如上图所示,左边为 grid1 ,右边为 grid2 。 grid2 中标红的 1 区域是子岛屿,总共有 2 个子岛屿。

  • m == grid1.length == grid2.length

  • n == grid1[i].length == grid2[i].length

  • 1 <= m, n <= 500

  • grid1[i][j] 和 grid2[i][j] 都要么是 0 要么是 1 。

问题分析

这题让计算右边的矩阵中有多少个岛屿是左边矩阵的子岛屿,所谓的岛屿,也就是连在一起的陆地,称为一个岛屿。所谓的子岛屿,也就是一个岛屿的所有陆地都被另一个岛屿包含。

解这题之前,我们先把左边矩阵中所有的岛屿都编上号,因为矩阵中只有 0 和 1 ,我们编号从 2 开始。由于这两个矩阵的长和宽都是一样的,我们遍历右边矩阵的时候,如果遇到一块陆地,然后再判断左边对应的位置是不是一个岛屿,如果左边对应的位置不是一个岛屿,那么右边和这块陆地相连的岛屿就不可能是左边的子岛屿。

如果左边对应的位置是一个岛屿,那么还要判断右边和该陆地相连的所有陆地(因为他们属于同一岛屿)是否都属于左边的那个岛屿。

JAVA:

private boolean isChild = true;// 是否是子岛屿

public int countSubIslands(int[][] grid1, int[][] grid2) {
int m = grid1.length, n = grid1[0].length;
int index = 2;// 给岛屿编号,相连的陆地是一个岛屿,他们的编号相同。
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid1[i][j] == 1)
dfs1(grid1, i, j, index++);
}
}
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// 找到grid2的所有岛屿,且每个岛屿中每个位置都与岛屿1中该位置的岛屿编号相同,才算一个子岛屿
if (grid2[i][j] == 1 && grid1[i][j] >= 2) {
isChild = true;
dfs2(grid2, i, j, grid1[i][j], grid1);
if (isChild)
ans++;
}
}
}
return ans;
}

// 遍历矩阵1
private void dfs1(int[][] grid1, int i, int j, int index) {
if (i < 0 || i >= grid1.length || j < 0 || j >= grid1[0].length || grid1[i][j] != 1)
return;
grid1[i][j] = index;// 挨着的陆地属于同一个岛屿
dfs1(grid1, i - 1, j, index);// 上
dfs1(grid1, i + 1, j, index);// 下
dfs1(grid1, i, j - 1, index);// 左
dfs1(grid1, i, j + 1, index);// 右
}

// 遍历矩阵2
private void dfs2(int[][] grid2, int i, int j, int index, int[][] grid1) {
if (i < 0 || i >= grid2.length || j < 0 || j >= grid2[0].length || grid2[i][j] != 1)
return;
grid2[i][j] = -1;
if (grid1[i][j] != index)
isChild = false;// 不是子岛屿
dfs2(grid2, i - 1, j, index, grid1);// 上
dfs2(grid2, i + 1, j, index, grid1);// 下
dfs2(grid2, i, j - 1, index, grid1);// 左
dfs2(grid2, i, j + 1, index, grid1);// 右
}

C++:

public:
int countSubIslands(vector> &grid1, vector> &grid2) {
int m = grid1.size();
int n = grid1[0].size();
int index = 2; // 给岛屿编号,相连的陆地是一个岛屿,他们的编号相同。
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid1[i][j] == 1)
dfs1(grid1, i, j, index++);
}
}

int ans = 0;
// 第二步:遍历 grid2,统计子岛屿数量
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// 找到grid2的所有岛屿,且每个岛屿中每个位置都与岛屿1中该位置的岛屿编号相同,才算一个子岛屿
if (grid2[i][j] == 1 && grid1[i][j] >= 2) {
isChild = true; // 重置标记
dfs2(grid2, i, j, grid1[i][j], grid1);
if (isChild) // 如果是子岛屿,计数+1
ans++;
}
}
}
return ans;
}

private:
bool isChild = true;// 是否是子岛屿
// 遍历矩阵1,给岛屿编号
void dfs1(vector> &grid1, int i, int j, int index) {
// 边界和合法性检查
if (i < 0 || i >= grid1.size() || j < 0 || j >= grid1[0].size() || grid1[i][j] != 1)
return;
grid1[i][j] = index;// 挨着的陆地属于同一个岛屿// 挨着的陆地属于同一个岛屿
// 上下左右递归遍历
dfs1(grid1, i - 1, j, index); // 上
dfs1(grid1, i + 1, j, index); // 下
dfs1(grid1, i, j - 1, index); // 左
dfs1(grid1, i, j + 1, index); // 右
}

// 遍历矩阵2,判断是否为子岛屿
void dfs2(vector> &grid2, int i, int j, int index, vector> &grid1) {
// 边界和合法性检查
if (i < 0 || i >= grid2.size() || j < 0 || j >= grid2[0].size() || grid2[i][j] != 1)
return;
// 标记 grid2 ,避免重复遍历
grid2[i][j] = -1;
// 如果 grid1 对应位置的编号不一致,说明不是子岛屿
if (grid1[i][j] != index)
isChild = false;
// 上下左右递归遍历
dfs2(grid2, i - 1, j, index, grid1); // 上
dfs2(grid2, i + 1, j, index, grid1); // 下
dfs2(grid2, i, j - 1, index, grid1); // 左
dfs2(grid2, i, j + 1, index, grid1); // 右
}

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解900多题,对算法题有自己独特的解题思路和解题技巧。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
11.78万 !丰田新车正式上市

11.78万 !丰田新车正式上市

科技堡垒
2026-10-04 11:10:43
一个奇方!治肩痛、脑梗、高血压,管一切淤堵不通之症!

一个奇方!治肩痛、脑梗、高血压,管一切淤堵不通之症!

书法小教程
2026-09-15 06:05:30
康铁邦论文为何被撤稿还牵出这么多问题

康铁邦论文为何被撤稿还牵出这么多问题

小眼睛小世界
2026-10-05 07:13:21
为什么说卡迪夫会议敲响了大英帝国解体警钟?

为什么说卡迪夫会议敲响了大英帝国解体警钟?

风铃草语
2026-10-05 04:24:06
萨姆纳意外受伤,缺席部分比赛,广东紧急召回昔日旧将,临危救主!

萨姆纳意外受伤,缺席部分比赛,广东紧急召回昔日旧将,临危救主!

体育见习官
2026-10-05 10:59:55
为什么碰瓷大妈能把讹诈演成“促销大戏”?

为什么碰瓷大妈能把讹诈演成“促销大戏”?

小眼睛小世界
2026-10-05 07:23:00
马特乌斯:C罗可能不仅和主帅闹僵了,或也失去了队友的支持

马特乌斯:C罗可能不仅和主帅闹僵了,或也失去了队友的支持

懂球帝
2026-10-05 11:49:33
“你儿子全身都是慢性炎症,还给他吃零食?”小学男生就诊过程,气的网友纷纷爆粗口!

“你儿子全身都是慢性炎症,还给他吃零食?”小学男生就诊过程,气的网友纷纷爆粗口!

蝴蝶花雨话教育
2026-09-28 00:05:40
13.5亿欧元砸下去,订单回流德国工厂:默茨这趟基辅,谁才是真赢家?

13.5亿欧元砸下去,订单回流德国工厂:默茨这趟基辅,谁才是真赢家?

浯江孤舟
2026-10-05 16:40:23
为什么电车跑长途总被续航和补能绊住脚?

为什么电车跑长途总被续航和补能绊住脚?

小眼睛小世界
2026-10-05 07:17:35
这国不装了,公开支持“南海仲裁法”,中方强硬回应,信号不简单

这国不装了,公开支持“南海仲裁法”,中方强硬回应,信号不简单

史智文道
2026-10-04 16:29:46
担心菲防长暗中使坏,中国提前大撤退,菲媒怕惹事,开始撇清关系

担心菲防长暗中使坏,中国提前大撤退,菲媒怕惹事,开始撇清关系

小玡说故事
2026-10-05 06:37:28
国庆期间“胖东来”游客增多,许昌市人大政协院免费开放200个停车位,网友:这是真正为人民服务

国庆期间“胖东来”游客增多,许昌市人大政协院免费开放200个停车位,网友:这是真正为人民服务

极目新闻
2026-10-05 16:20:38
疑点重重!上海音乐老师泰国失联事件再起波澜,谎话连篇,落地去向成谜,不少隐情被挖出

疑点重重!上海音乐老师泰国失联事件再起波澜,谎话连篇,落地去向成谜,不少隐情被挖出

秋风妃
2026-10-04 22:55:17
班主任坦言:高中能考上985、211的孩子,基本都戒掉了这3样东西,手机排第一

班主任坦言:高中能考上985、211的孩子,基本都戒掉了这3样东西,手机排第一

好爸育儿
2026-10-03 22:20:05
3-2险胜,张本智和回应爆冷:对手发球问题,世排前十外和自己打,要想乱七八糟的办法才有戏赢

3-2险胜,张本智和回应爆冷:对手发球问题,世排前十外和自己打,要想乱七八糟的办法才有戏赢

好乒乓
2026-10-05 17:13:30
苏州一对情侣,谈了7年,女子提了18次分手,分手后在街头痛哭!

苏州一对情侣,谈了7年,女子提了18次分手,分手后在街头痛哭!

川渝视觉
2026-04-17 22:13:14
发现没,凡是夫妻关系好、家庭幸福和睦的,都有一个共性,那就是男人特别清醒,永远会把自己的小家庭放在首位,无条件地支持妻子

发现没,凡是夫妻关系好、家庭幸福和睦的,都有一个共性,那就是男人特别清醒,永远会把自己的小家庭放在首位,无条件地支持妻子

阿呆爸
2026-09-07 22:15:04
俄罗斯买伊朗导弹打无人机,拆开一看:中国前卫-1的血统!

俄罗斯买伊朗导弹打无人机,拆开一看:中国前卫-1的血统!

小莜读史
2026-10-04 18:48:18
2009年江腾蛟去世,临终前留下唯一心愿:最后再穿一次55式军装

2009年江腾蛟去世,临终前留下唯一心愿:最后再穿一次55式军装

历史甄有趣
2026-10-04 19:20:09
2026-10-05 17:59:00
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
273文章数 4关注度
往期回顾 全部

科技要闻

DeepSeek Harness国庆假期上新!

头条要闻

缅方称"没中国人死" 中国警方从缅北取证带回3具尸体

头条要闻

缅方称"没中国人死" 中国警方从缅北取证带回3具尸体

体育要闻

30天30队·热:扬尼斯、阿德巴约与克雷

娱乐要闻

蔡康永事件发酵!品牌火速切割

财经要闻

零跑声明切割!蔡康永两面人身份被抵制

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

游戏
健康
旅游
房产
公开课

曝性感克莱尔回归《生化10》 香艳美人要当主角了

刷酸祛痘,为什么有人翻车?

旅游要闻

拒绝“冤种三件套”,年轻人对景区文创同质化说不 |新京报快评

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版