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

字节大佬找工作被呛:没给你3d接雨水已经是放过你了。。。

0
分享至

最近一字节离职员工找工作,面试机会很少,被网友呛:没给你3d接雨水已经是放过你了。接雨水是LeetCode上的两道题,一道是 2 维的一道是 3 维的,这两道题都是Hard级别,相对于其他题来说是有一定难度,如果搞懂原理之后也没那么难,我之前写过,可以看下:

网友评论:

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

来看下今天的算法题,这题是LeetCode的第1254:统计封闭岛屿的数目。

问题描述

来源:LeetCode第1254题

难度:中等

二维矩阵 grid 由 0 (土地)和 1 (水)组成。岛是由最大的4个方向连通的 0 组成的群,封闭岛是一个 完全 由1包围(左、上、右、下)的岛。请返回封闭岛屿的数目。

示例1:


输入:grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]] 输出:2 解释: 灰色区域的岛屿是封闭岛屿,因为这座岛屿完全被水域包围(即被 1 区域包围)。

示例2:


输入:grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]] 输出:1

  • 1 <= grid.length, grid[0].length <= 100

  • 0 <= grid[i][j] <=1

问题分析

这题让计算岛屿的数量,0 是土地,可以构成岛屿,1 是水,其中 岛屿必须被水包围 。

我们可以使用DFS来解这道题,遍历二维数组,如果是 1 (水) 就跳过,如果是 0 (土地),说明 有可能是岛屿 。我们需要沿着它的上下左右 4 个方向遇到土地的要全部把它变成水。

注意岛屿不能延伸到矩阵的边界,因为岛屿必须被水包围的,而边界上的位置是没法被包围的。

JAVA:

public int closedIsland(int[][] grid) {
    int ans = 0; // 岛屿的数量
    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[0].length; j++) {
            // 如果是0,说明是陆地,然后在计算
            if (grid[i][j] == 0)
                ans += dfs(grid, i, j);
        }
    }
    return ans;
}

private int dfs(int[][] land, int i, int j) {
    // 如果到边界了,并且边界是陆地,说明这一连串陆地没有被水给包围,不是岛屿,直接返回0
    if ((i == 0 || i == land.length - 1 || j == 0 ||
            j == land[0].length - 1) && land[i][j] == 0)
        return 0;
    if (land[i][j] == 1) // 如果当前区域是水域,就返回 1
        return 1;
    int count = 1;
    // 表示已经被统计过了,防止重复统计。
    land[i][j] = 1;
    // 然后沿着当前水域的上下左右4个方向继续查找。
    count &= dfs(land, i - 1, j);// 上
    count &= dfs(land, i + 1, j);// 下
    count &= dfs(land, i, j - 1);// 左
    count &= dfs(land, i, j + 1);// 右
    return count;
}

C++:

public:
    int closedIsland(vector

 > &grid) {         int ans = 0; // 岛屿的数量         for (int i = 0; i < grid.size(); i++) {             for (int j = 0; j < grid[0].size(); j++) {                 // 如果是0,说明是陆地,然后在计算                 if (grid[i][j] == 0)                     ans += dfs(grid, i, j);             }         }         return ans;     }     int dfs(vector

 > &grid, int i, int j) {         // 如果到边界了,并且边界是陆地,说明这一连串陆地没有被水给包围,不是岛屿,直接返回0         if ((i == 0 || i == grid.size() - 1 || j == 0 ||              j == grid[0].size() - 1) && grid[i][j] == 0)             return 0;         if (grid[i][j] == 1) // 如果当前区域是水域,就返回 1             return 1;         int count = 1;         // 表示已经被统计过了,防止重复统计。         grid[i][j] = 1;         // 然后沿着当前水域的上下左右4个方向继续查找。         count &= dfs(grid, i - 1, j);// 上         count &= dfs(grid, i + 1, j);// 下         count &= dfs(grid, i, j - 1);// 左         count &= dfs(grid, i, j + 1);// 右         return count;     }


Python:

def closedIsland(self, grid: List[List[int]]) -> int:
    def dfs(i, j):
        # 如果到边界了,并且边界是陆地,说明这一连串陆地没有被水给包围,不是岛屿,直接返回0
        if (i == 0 or i == len(grid) - 1 or j == 0 or j == len(grid[0]) - 1) and grid[i][j] == 0:
            return 0
        if grid[i][j] == 1:  # 如果当前区域是水域,就返回 1
            return 1
        count = 1
        # 表示已经被统计过了,防止重复统计。
        grid[i][j] = 1
        # 然后沿着当前水域的上下左右4个方向继续查找。
        count &= dfs(i - 1, j)  # 上
        count &= dfs(i + 1, j)  # 下
        count &= dfs(i, j - 1)  # 左
        count &= dfs(i, j + 1)  # 右
        return count

    ans = 0  # 岛屿的数量
    for i in range(len(grid)):
        for j in range(len(grid[0])):
            # 如果是0,说明是陆地,然后在计算
            if grid[i][j] == 0:
                ans += dfs(i, j)
    return ans

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。


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

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.

相关推荐
热点推荐
39岁的多尔衮在塞外坠马身亡,弥留时急召胞兄阿济格托付后事

39岁的多尔衮在塞外坠马身亡,弥留时急召胞兄阿济格托付后事

磊子讲史
2026-06-15 15:19:58
风向变了:985冷门下跌,211王牌暴涨,志愿别再只冲名校

风向变了:985冷门下跌,211王牌暴涨,志愿别再只冲名校

老程侃事儿
2026-06-28 11:07:59
霸座咬人风波升级!大妈被找后举动反常,恐怕不止赔钱那么简单

霸座咬人风波升级!大妈被找后举动反常,恐怕不止赔钱那么简单

大鱼简科
2026-06-28 11:38:30
世界杯32强全部诞生!上半区堪称死亡半区,神仙内卷淘汰赛来了

世界杯32强全部诞生!上半区堪称死亡半区,神仙内卷淘汰赛来了

史鹷的生活科普
2026-06-28 18:17:43
梅西遇佛得角?斯卡洛尼:西班牙乌拉圭都没赢他们

梅西遇佛得角?斯卡洛尼:西班牙乌拉圭都没赢他们

温柔且自由
2026-06-29 00:39:25
两个事实证明,中国实际已经控制了面积80平方公里的南沙五方礁

两个事实证明,中国实际已经控制了面积80平方公里的南沙五方礁

青山夜谈
2026-06-25 21:07:39
复旦教授为《抓特务》鸣不平!你都没看过电影,有什么资格批评?

复旦教授为《抓特务》鸣不平!你都没看过电影,有什么资格批评?

小徐讲八卦
2026-06-29 13:09:14
伊拉克新总理深夜调兵入城,一夜之间就让巴格达“变了天”

伊拉克新总理深夜调兵入城,一夜之间就让巴格达“变了天”

傲傲讲历史
2026-06-29 14:33:17
为什么女人第一次同房后,后面不主动也不拒绝呢?

为什么女人第一次同房后,后面不主动也不拒绝呢?

思絮
2026-06-02 10:06:18
高考分数屏蔽:清华北大任选!办5天升学宴,通知书让父母傻眼了

高考分数屏蔽:清华北大任选!办5天升学宴,通知书让父母傻眼了

菁妈育儿
2026-06-26 11:32:09
中国灵活就业者突破3.2亿大关,占就业人口比例高达44%。

中国灵活就业者突破3.2亿大关,占就业人口比例高达44%。

流苏晚晴
2026-06-13 18:21:18
勇士,还有大操作?

勇士,还有大操作?

舟望停云
2026-06-29 15:20:36
WTT美国赛32强诞生:林诗栋剃光头,韩国溃败,王楚钦开打

WTT美国赛32强诞生:林诗栋剃光头,韩国溃败,王楚钦开打

格斗联盟王大锤
2026-06-29 11:37:58
给2026年最好的10部古装剧排名:逐玉第3,莫离第9,第1没争议

给2026年最好的10部古装剧排名:逐玉第3,莫离第9,第1没争议

追星顶流大姑娘
2026-06-29 11:35:27
中国网友的造梗能力能拿世界杯冠军

中国网友的造梗能力能拿世界杯冠军

雷斯林
2026-06-25 14:27:51
“看发型就知道,没一个能考上的”,考场外一幕,令家长看清现实

“看发型就知道,没一个能考上的”,考场外一幕,令家长看清现实

世界圈
2026-06-29 09:41:17
畜生永远是畜生!这位美少妇,脸彻底毁了!

畜生永远是畜生!这位美少妇,脸彻底毁了!

皮蛋儿电影
2026-06-22 09:58:04
马斯克被嘲!媒体称他跌落神坛、仅剩9570亿美元,评论区笑死人!

马斯克被嘲!媒体称他跌落神坛、仅剩9570亿美元,评论区笑死人!

谭谈社会
2026-06-28 16:23:19
赵继伟领衔12人战日本!7人离队名单公布,23岁锋线天才最扎心

赵继伟领衔12人战日本!7人离队名单公布,23岁锋线天才最扎心

星Xin辰大海
2026-06-29 13:08:35
3-1晋级!国乒20岁1米83新星崛起:抢位大战他逆袭而上?

3-1晋级!国乒20岁1米83新星崛起:抢位大战他逆袭而上?

李喜林篮球绝杀
2026-06-29 11:24:14
2026-06-29 16:32:49
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
273文章数 4关注度
往期回顾 全部

科技要闻

OpenAI推迟上市,那“Kimi们”呢?

头条要闻

运-20最新大片片尾"彩蛋"提到的"小六"是谁 专家分析

头条要闻

运-20最新大片片尾"彩蛋"提到的"小六"是谁 专家分析

体育要闻

他和伊朗队,再次赢得全世界的尊重

娱乐要闻

萧蔷宣布捐出参加“浪姐”所有收入

财经要闻

35岁职场人,又好找工作了?

汽车要闻

全新宝马iX3长轴版将于成都车展预售 四季度交付

态度原创

本地
艺术
健康
手机
军事航空

本地新闻

贵州小城的新目标:举办“村超”世界杯!

艺术要闻

《顽固者的城——胡吉宏的艺术实践》学术交流展于贵州启幕

“无糖汤圆”是否隐藏着健康陷阱?

手机要闻

苹果2027年产品线曝光,消息称iPhone 19 Pro系等已开模测试

军事要闻

普京最新发声:俄罗斯正处于命运攸关之际

无障碍浏览 进入关怀版