leetcode:1905. 统计子岛屿

2023-11-18

题目来源

题目描述

在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {

    }
};

题目解析

DFS

这道题的关键在于:如何快速判断子岛屿

一个方法是借助UnionFind。

现在我们用DFS来做

什么时候grid2中的一个岛屿B是grid1中的一个岛屿的子岛呢?

  • 当岛屿B中所有陆地在岛屿A中也是陆地的时候,岛屿B是岛屿A的子岛屿
  • 反过来说,如果岛屿B中存在一片陆地,在岛屿A的对应位置是海水,那么岛屿B就不是岛屿A的子岛。

那么,我们只要遍历grid2中的所有岛屿,把那些不可能是子岛的岛屿排除掉,剩下的就是子岛。

class Solution {
    // 从 (i, j) 开始,将与之相邻的陆地都变成海水
    void dfs(vector<vector<int>>& grid, int i, int j){
        int m = grid.size(), n = grid[0].max_size();
        if (i < 0 || j < 0 || i >= m || j >= n) {
            return;
        }
        if (grid[i][j] == 0) {
            return;
        }

        grid[i][j] = 0;
        dfs(grid, i + 1, j);
        dfs(grid, i, j + 1);
        dfs(grid, i - 1, j);
        dfs(grid, i, j - 1);
    }
public:
    int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {
        int m = grid1.size(), n = grid1[0].max_size();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if(grid1[i][j] == 0 && grid2[i][j] == 1){
                    // 这个岛屿肯定不是子岛,淹掉
                    dfs(grid2, i, j);
                }
            }
        }
        // 现在 grid2 中剩下的岛屿都是子岛,计算岛屿数量
        int res = 0;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (grid2[i][j] == 1) {
                    res++;
                    dfs(grid2, i, j);
                }
            }
        }
        return res;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode:1905. 统计子岛屿 的相关文章

随机推荐

  • exe和dll库分离

    c 在写程序的时候一般会用到第三方库 我们在引用后 一般会把第三方库复制到debug生成的目录下 如果第三方库的dll很少那还可以 如果第三方库的dll很多 那么就会和自己生成的exe混在一起 看着极其混乱 所以有时候会把第三方库文件单独的
  • 高端算法总结

    1 合并排序 2 两次筛选 3 BANSAC 4 动态规划 5 Karatsuoa 乘法 6 快速傅里叶变换 7 最大流量算法 8 learing学习算法 9 RSA 10 Strassen 11 单纯型算法 12 奇异值分解 13 求解线
  • upload-labs靶场第一关——第九关

    Pass 01JS检测绕过 1 根据提示 从上述代码中可以看出 上述代码使用了JavaScript脚本 在前端对用户上传文件的类型进行了检测 因此 我们只需要先上传符合JavaScript脚本要求的数据包 然后使用Burpsuit抓取该数据
  • python+Appium自动化:python多线程多并发启动appium服务

    Python启动Appium 服务 使用Dos命令或者bat批处理来手动启动appium服务 启动效率低下 如何将启动Appium服务也实现自动化呢 这里需要使用subprocess模块 该模块可以创建新的进程 并且连接到进程的输入 输出
  • 数据可视化第五章

    基于python的散点图实现 py import ggplot as gp import pandas as pd crime pd read csv crimeRatesByState2005 csv plot gp ggplot gp
  • 有点钱怎么做副业?应该投资哪些副业?

    有点钱怎么做副业 应该投资哪些副业 现在很多上班族 失业族 甚至连带孩子的妈妈们 他们不满足现状 给自己寻找赚钱的机会 一个是为了丰富自己的业余生活 再个就是能更加充实自己的钱包 让自己更为独立 也能自主 现在有哪些小途径可以实现轻松赚钱呢
  • Lua中的定时器

    Lua定时器 Cocos2d x C 中的定时器网上有很多 也很容易找 所以我就不写了 直接Lua吧 在Lua中用定时器的地方很多 我是深有体会啊 比如说我们需要一个函数每帧都执行 那么就可以用定时器来解决啦 旁白 好哇 好哇 终于可以解决
  • 搭建域控和添加本域辅域控,加入域(上)(精准扶小白)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 安装环境 操作系统 Windows2012 一 什么是工作组 域 活动目录 树 林 工作组 处在同一个局域网中的用户 他们也默认处于同一个工作组 且加入工作组不需要信任过程
  • [PYTHON与CSP的姻缘]2023-3 LDAP

    练习过程 一开始一直以为set输出数字的时候是有序的 扣了一天一直显示错误 不知道哪跟哪 大冤种无语了 然后改了输出直接满分 无语ing 主要注意要考虑到表达式的一些嵌套 这样就可以参考题干中对语句的递归定义来写 用递归进行对表达式的切分处
  • react有哪些性能优化的手段?

    1 使用组件shouldComponentUpdate方法 通过在组件爱你中实现shouldComponentUpdate方法 可以手动控制组件的更新 在该方法中 可以根据组件的属性和状态进行比较 判断是否需要进行更新 避免不必要的更新可以
  • 539. Minimum Time Difference

    Given a list of 24 hour clock time points in Hour Minutes format find the minimum minutes difference between any two tim
  • 数据库几种删除的区别delete,truncate,drop

    delete from 表名 where 条件 gt 删除满足条件的记录 delete from test where id 1 delete from test gt 删除所有 commit gt 提交数据 rollback gt 回滚数
  • Java面试题大全(2021版)

    发现网上很多Java面试题都没有答案 所以花了很长时间搜集整理出来了这套Java面试题大全 希望对大家有帮助哈 本套Java面试题大全 全的不能再全 哈哈 博主已将以下这些面试题整理成了一个Java面试手册 是PDF版的 关注博主的微信公众
  • 用递归进行数组求和

    记录一下zj提前批算法一面 用递归进行数组求和 算法马上就写出来了 但是运行的时候一直报栈溢出 我以为是我的递归逻辑出问题了 就一直在改 但是还是报错 最终卡住了 开局就GG 自己也慌得一批 导致我第二道题也没做出来 最初写的代码如下 au
  • Nginx 负载均衡模块 ngx_http_upstream_module 详述

    译序 截至发稿时止 官方最新 ngx http upstream module 指令详述 官方随时在更新 请及时关注官网最新公布 以下是官方原文 ngx http upstream module 模块用于定义可以被 proxy pass f
  • GBase 8a 问题处理-集群管理节点无法正常启动

    问题版本 GBase 8a V8 6 2 43 R20 问题简述 在进行迁移工作的数据导入之后 启动集群所有管理节点一直不能正常启动 通过命令service gcware stop 也不能停止 报错信息 gcadmin 报错 Could n
  • MySQL索引优化(超详细)

    Mysql索引优化 1 索引介绍 1 1 什么时MySQL的索引 MySQL官方对于索引的定义 索引是帮助MySQL高效获取数据的数据结构 MySQL在存储数据之外 数据库系统中还维护着满足特定查找算法的数据结构 这些数据结构以某种引用 指
  • CSDN竞赛-第六期

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 前言 背景 不知不觉 CSDN编程竞赛已经进行六期了 从我知道有这个竞赛的时候已经进行了两期 所以我是从第三期开始的 期间参与过三次 成绩在
  • 4,引擎初始化--(4)加载地图--2,创建world(学习资料来源于UE4游戏框架)

    加载地图时 创建完默认GameMode 就要创建world了 首先读取到package 创建world 从这里可以看到 地图是可以在初始化建立的 GameInstance是在运行起来后建立 两者是独立的 设为当前World 并设定为全局GW
  • leetcode:1905. 统计子岛屿

    题目来源 leetcode 1905 统计子岛屿 题目描述 class Solution public int countSubIslands vector