LC1020:飞地的数量

题目

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。

一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。

返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

示例 1:

输入: grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出: 3
解释: 有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。

解法

我自己是用的bfs,速度还行,击败了82.73%的Java用户

image.png

我自己写的如下:

class Solution {
    boolean[][] st;
    int n, m, count;
    int[] dx= {0, 0, 1, -1}, dy= {1, -1, 0 , 0};
    class pair {
        int x, y;
        public pair(int x, int y) {
            this.x = x;this.y = y;
        }
    }
    public int numEnclaves(int[][] grid) {
        n = grid.length;
        m = grid[0].length;
        st = new boolean[n + 1][m + 1];
        int count = 0;
        for(int i = 0;i < n;i ++) {
            if(grid[i][0] == 1 && !st[i][0]) {
                find(i, 0, grid);
            }
        }
        for(int i = 0;i < n;i ++) {
            if(grid[i][m - 1] == 1 && !st[i][m - 1]) {
                find(i, m - 1, grid);
            }
        }
        for(int i = 0;i < m;i ++) {
            if(grid[0][i] == 1 && !st[0][i]) {
                find(0, i, grid);
            }
        }
        for(int i = 0;i < m;i ++) {
            if(grid[n - 1][i] == 1 && !st[n - 1][i]) {
                find(n - 1, i, grid);
            }
        }
        for(int i = 1;i < n - 1;i ++) {
            for(int j = 1;j < m - 1;j ++) {
                if(grid[i][j] == 1 && !st[i][j]) {
                    count ++;
                }
            }
        }
        return count;

    }
    public void find(int x, int y, int[][] grid) {
        ArrayDeque<pair> aq = new ArrayDeque<>();
        aq.offer(new pair(x, y));
        st[x][y] = true;
        while(!aq.isEmpty()) {
            pair p = aq.poll();
            for(int i =0 ;i < 4;i ++) {
                int nx = p.x + dx[i], ny = p.y + dy[i];
                if(nx < 0 || ny < 0 || nx >= n || ny >= m || grid[nx][ny] == 0) continue;
                if(!st[nx][ny]) {
                    st[nx][ny] = true;
                    aq.offer(new pair(nx, ny));
                }
                
            }
        }
    }
}   

看的速度更快的用dfs进行迭代的代码,很漂亮,值得学习

class Solution {
    public int numEnclaves(int[][] grid) {
        int res = 0;

        int n = grid.length, m = grid[0].length;

        for(int i = 0; i < n; i++){
            if(grid[i][0] == 1){
                dfs(grid, i, 0);
            }
        }

        for(int i = 0; i < n; i++){
            if(grid[i][m - 1] == 1){
                dfs(grid, i, m - 1);
            }
        }

        for(int j = 0; j < m; j++){
            if(grid[0][j] == 1){
                dfs(grid, 0, j);
            }
        }

        for(int j = 0; j < m; j++){
            if(grid[n - 1][j] == 1){
                dfs(grid, n - 1, j);
            }
        }

        for(int i = 1; i < n - 1; i++){
            for(int j = 1; j < m - 1; j++){
                if(grid[i][j] == 1){
                    res += 1;
                }
            }
        }

        return res;
    }

    void dfs(int[][] grid, int x, int y){
        if(!(0 <= x && x < grid.length && 0 <= y && y < grid[0].length)){
            return ;
        }

        if(grid[x][y] != 1){
            return;
        }

        grid[x][y] = 2;
        
        dfs(grid, x - 1, y);
        dfs(grid, x + 1, y);
        dfs(grid, x, y - 1);
        dfs(grid, x, y + 1);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在ubuntu中启动docker的mysql8镜像

首先查看docker是否启动&#xff1a; docker ps #出现信息就是启动成功 启动命令&#xff1a; sudo systemctl start docker 设置开机自启&#xff1a; sudo systemctl enable docker 查询下载好的mysql8的镜像文件&#xff1a; docker images 在启动查询好的镜像文件&#…

Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装&#xff08;Centos 7&#xff09; 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法

【Pytorch】一文向您详细介绍 model.eval() 的作用和用法 下滑查看解决方法 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕…

桂电人工智能学院大数据实验,使用 Docker 搭建 hadoop 集群

桂电人工智能学院大数据实验&#xff0c;使用 Docker 搭建 hadoop 集群 第一步 安装 Docker, Windows 上可以使用 Docker Desktop 下载地址&#xff1a;https://www.docker.com/products/docker-desktop/ 安装过程自行谷歌 安装好的标志&#xff1a;打开终端 运行docker p…

论文阅读:基于谱分析的全新早停策略

来自JMLR的一篇论文&#xff0c;https://www.jmlr.org/papers/volume24/21-1441/21-1441.pdf 这篇文章试图通过分析模型权重矩阵的频谱来解释模型&#xff0c;并在此基础上提出了一种用于早停的频谱标准。 1&#xff0c;分类难度对权重矩阵谱的影响 1.1 相关研究 在最近针对…

ERP、CRM、MRP、PLM、APS、MES、WMS、SRM系统介绍

一、ERP系统 ERP系统&#xff0c;即企业资源计划&#xff08;Enterprise Resource Planning&#xff09;系统&#xff0c;是一种集成管理软件系统&#xff0c;旨在帮助企业实现资源的有效管理和优化。以下是对ERP系统的详细介绍&#xff1a; 1、定义与功能 ERP是企业资源计划…

1832javaERP管理系统之车间计划管理Myeclipse开发mysql数据库servlet结构java编程计算机网页项目

一、源码特点 java erp管理系统之车间计划管理是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了serlvet设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Mye…

PCIe总线-RK3588 PCIe子系统简介(八)

1.PCIe子系统 RK3588 PCIe子系统如下图所示。总共拥有5个PCIe控制器。PCIe30X4(4L)支持RC和EP模式&#xff0c;其他4个仅支持RC模式。ITS port 1连接PCIe30X4(4L)和PCIe30X2(2L)控制器&#xff0c;PCIe30X4(4L)和PCIe30X2(2L)控制器使用PCIe3.0 PIPE PHY。ITS port 0连接PCIe3…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 游戏表演赛分队(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 游戏表演赛分队(100分) 🌍 评测功能需要订阅专栏后私信联系…

uniapp使用css实现瀑布流

页面 <template><view><gj v-if"likeList.length 0"></gj><view v-else class"list"><view class"pbl" v-for"(item,index) in likeList" :key"index"><view class"image&quo…

Github 2024-06-15Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:M…

Windows10 MySQL(8.0.37)安装与配置

一、MySQL8.0.37下载 官网下载链接&#xff1a; https://dev.mysql.com/downloads/ 解压文件&#xff0c;解压到你想要的位置 二、新建MySQL配置文件 右键新建文本文档 新建my.txt文件 编辑my.txt文件&#xff0c;输入以下内容 [mysqld] # 设置 3306 端口 port3306 # 设…

Agilent 安捷伦 N9342C 手持式频谱分析仪

Agilent 安捷伦 N9342C 手持式频谱分析仪 N9342C 手持式7GHz频谱分析仪专为现场测试而设计&#xff0c;无论是安装和维护射频系统&#xff0c;现场进行故障诊断&#xff0c;监测射频环境还是分析干扰&#xff0c;都可以为您提供快速、精确的测量。它具有同类最佳的显示平均噪声…

【面试干货】Integer 和 int 的区别

【面试干货】Integer 和 int 的区别 1、基本类型与包装类型2、内存占用3、自动装箱与拆箱4、null 值5、常量池6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;Integer 和 int 是两种不同类型的变量&#xff0c;…

<Linux>进程

进程 文章目录 进程PCBpid与ppidfork系统调用进程状态孤儿进程状态优先级环境变量进程地址空间虚拟地址 最直观的表示&#xff1a;启动一个软件&#xff0c;本质就是启动一个进程 PCB PCB是Process Control Block的简称&#xff0c;是用来描述进程状态信息的数据结构。 进程运…

STM32学习记录(五)————外部中断EXTI

文章目录 前言一、外部中断EXTI基础知识1.外部中断介绍2.外部中断框架2.1AFIO2. 2.STM32外部中断机制框架 总结 前言 一个学习STM32的小白~ 有问题私信或评论区指出~ 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、外部中断EXTI基础知识 1.外部中…

CSS加载动画1

3个圈圈加载的动画 CSS结构 #app-loading {position: relative;top: 45vh;margin: 0 auto;color: #409eff;font-size: 12px;}#app-loading,#app-loading::before,#app-loading::after {width: 2em;height: 2em;border-radius: 50%;animation: 2s ease-in-out infinite app-loa…

GraphQL(7):ConstructingTypes

1 使用GraphQLObjectType 定义type&#xff08;类型&#xff09; 不使用ConstructingTypes定义方式如下&#xff1a; 使用ConstructingTypes定义方式如下&#xff1a; 更接近于构造函数方式 var AccountType new graphql.GraphQLObjectType({name: Account,fields: {name: …

使用Redis将单机登录改为分布式登录

使用Redis将单机登录改为分布式登录 1. 背景 ​ 现在大多数的应用程序登录的方式都是必须满足分布式登录的效果&#xff0c;比如我们在一个客户端登录之后可以在另一个客户端上面共享当前用户的信息&#xff0c;这样在另一个客户端登录的时候就不用用户再次输入自己的账号密码…

Python 全栈系列253 再梳理flask-celery的搭建

说明 最近做了几个实验&#xff0c;将结论梳理一下&#xff0c;方便以后翻看。 1 flask-celery 主要用于数据流的同步任务&#xff0c;其执行由flask-aps发起&#xff0c;基于IO并发的方法&#xff0c;达到资源的高效利用&#xff0c;满足业务上的需求。2 目前部署环境有算网…