1020. 飞地的数量

1020. 飞地的数量

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • _1020飞地的数量_dfs_定义方向
    • _1020飞地的数量_bfs_定义方向
  • 错误经验吸取

原题链接:

1020. 飞地的数量

https://leetcode.cn/problems/number-of-enclaves/description/

完成情况:

在这里插入图片描述

解题思路:

private final static int [][] directions = {{-1,0},{1,0},{0,-1},{0,1}};
private int rows,columns; //减少递归函数中,额外的参数调用
private boolean [][] visited;

/**
*

  • @param grid
  • @return
    */
    … for (int i = 1;i<rows-1;i++){
    for (int j = 1;j<columns-1;j++){
    if (grid[i][j] == 1 && !visited[i][j]){
    enclaves++;
    }
    }
    }
    return enclaves;
    }“”

这段代码定义了一个二维数组 directions,存储了四个方向的偏移量;声明了 rows 和 columns 变量,用来减少递归函数中的额外参数调用;还定义了一个二维布尔数组 visited。

在主要的代码逻辑中,通过两个 for 循环遍历二维数组 grid,当 grid[i][j] 的值为 1 且 visited[i][j] 为 false 时,将 enclaves 的值加一。最终返回 enclaves 的值。

参考代码:

_1020飞地的数量_dfs_定义方向

package leetcode板块;public class _1020飞地的数量_dfs_定义方向 {private final static int [][] directions = {{-1,0},{1,0},{0,-1},{0,1}};private int rows,columns;   //减少递归函数中,额外的参数调用private boolean [][] visited;/**** @param grid* @return*/public int numEnclaves(int[][] grid) {rows = grid.length;columns = grid[0].length;visited = new boolean[rows][columns];//----------先处理四个边界---------------------------for (int i = 0; i < rows; i++){dfs_numEnclaves(grid,i,0);dfs_numEnclaves(grid,i,columns-1);}for (int j = 1;j<columns;j++){dfs_numEnclaves(grid,0,j);dfs_numEnclaves(grid,rows-1,j);}//--------对中间值逐个去dfs,寻找满足条件的飞地enclaves---------int enclaves = 0;for (int i = 1;i<rows - 1;i++){for (int j = 1;j<columns - 1;j++){if (grid[i][j] == 1 && !visited[i][j]){     //如果满足为1,且已经访问过这个节点,那么它就是飞地enclavesenclaves++;}}}return enclaves;}/**** @param grid* @param curRow* @param curCol*/private void dfs_numEnclaves(int[][] grid, int curRow, int curCol) {//边界判断if (curRow < 0 || curRow >= rows || curCol < 0 || curCol >= columns || grid[curRow][curCol] == 0 || visited[curRow][curCol]){return ;}//节点为1visited[curRow][curCol] = true;//遍历它的四个方向for (int [] dir :directions){dfs_numEnclaves(grid,curRow + dir[0],curCol+dir[1]);}}
}

_1020飞地的数量_bfs_定义方向

package leetcode板块;import java.util.ArrayDeque;
import java.util.Deque;public class _1020飞地的数量_bfs_定义方向 {private final static int [][] directions = {{-1,0},{1,0},{0,-1},{0,1}};private int rows,columns;   //减少递归函数中,额外的参数调用private boolean [][] visited;/**** @param grid* @return*/public int numEnclaves(int[][] grid) {rows = grid.length;columns = grid[0].length;visited = new boolean[rows][columns];//bfs就不需要额外调用了,使用队列来解决Deque<int []> myQueue = new ArrayDeque<>();     //用于判断四个方向,所以采用int []//----------先处理四个边界---------------------------for (int i = 0; i < rows; i++){if (grid[i][0] == 1){visited[i][0] = true;myQueue.offer(new int[]{i,0});}if (grid[i][columns - 1] == 1){visited[i][columns - 1] = true;myQueue.offer(new int[]{i,columns-1});}}for (int j = 1;j<columns;j++){if (grid[0][j] == 1){visited[0][j] = true;myQueue.offer(new int[]{0,j});}if (grid[rows-1][j] == 1){visited[rows-1][j] = true;myQueue.offer(new int[]{rows-1,j});}}//-------------对队列中每一个元素进行四个方向的遍历查询----------------------while (!myQueue.isEmpty()){int [] queueCell  = myQueue.poll();int curRow = queueCell[0],curCol = queueCell[1];for (int [] dir : directions){int nextRow = curRow + dir[0],nextCol = curCol + dir[1];if (nextRow >= 0 && nextRow < rows && nextCol >= 0 && nextCol < columns && grid[nextRow][nextCol] == 1 && !visited[nextRow][nextCol]){visited[nextRow][nextCol] = true;myQueue.offer(new int[]{nextRow,nextCol});}}}int enclaves = 0;for (int i = 1;i<rows-1;i++){for (int j = 1;j<columns-1;j++){if (grid[i][j] == 1 && !visited[i][j]){enclaves++;}}}return enclaves;}}

错误经验吸取

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十年磨一剑“2024成都电子信息展会”推动电子产业全球发展

2024成都电子展&#xff0c;招商工作已接近尾声&#xff0c;这场盛大的展会不仅是电子信息行业的一次盛会&#xff0c;更是中国西部电子信息产业发展的重要里程碑。自2013年起&#xff0c;中国&#xff08;西部&#xff09;电子信息博览会便选择成都作为其永久的举办地&#xf…

windows系统jupyter lab安装和配置:本地开发、探索大模型的利器

前言 在安装好anaconda之后&#xff0c;系统默认就安装好了一个jupyter notebook的工具&#xff0c;该工具可以在网页端运行&#xff0c;类似这样&#xff1a; 提供了一个按行运行的python运行环境&#xff0c;每一步的输出都可以打印到界面&#xff0c;对于我们初学python&am…

JAVA语音播报

JAVA语音播报 提示&#xff1a;难点&#xff0c;常规语音播放只是播放一段音乐&#xff0c;这个比较简单。本文介绍将文字语音播放出来&#xff0c;并且可以兼容windows、linux 语音播报在编码过程中&#xff0c;我们主要需从以下几个核心层面进行深入考量。 1.使用JACOB开源…

sql小总结

SQL的一些使用技巧&#xff1a; 1. null 我们在进行/<>/in/not in等判断时&#xff0c;null会不包含在这些判断条件中&#xff0c;所以在对null的处理时可以使用nvl或者coalesce函数对null进行默认转换。&#xfeff; 2. select * 尽可能提前对列进行剪裁&#xff0c…

android 在 Activity 的 onCreate 中获取View 的宽高

view 的 post 执行时&#xff0c;首先会判断view 的 mAttatchInfo 是否为空&#xff0c;如果不为空&#xff0c;则将Runnable 添加到mAttachInfo.handler 的 UI线程MessageQueue 中&#xff1b;如果为空&#xff0c;则先将Runnable 暂存在view 的类为HandlerActionQueue的mRunQ…

2024上海国际化工自动化仪器仪表展览会

2024上海国际化工自动化仪器仪表展览会 2024 Shanghai International Chemical Automation Instrument Exhibition 时间&#xff1a;2024年12月11-13日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位…

makefile 进阶

# 定义编译器 CC gcc CXX g #目标名称 TARAET : main # 定义目标文件存放目录 BUILD_DIR : _build#自定义命令 MKDIR mkdir -p $(dir $)# 定义头文件存放目录 INC_PATH : $(nullstring) # 定义源文件存放目录 SRC_PATH : $(nullstring)# 定义编译选项 CFLAGS : $(nullstring…

521源码-免费源码-子比主题最新版7.6绕授权破解完整教程

首先&#xff0c;zibll主题授权是向api.zibll.com发送请求&#xff0c;api.zibll.com就验证这个请求&#xff0c;如果参数(比如header)正确那么授权成功&#xff0c;然而众所周知&#xff0c;服务器可以修改本地host文件&#xff0c;来实现某些特定功能&#xff0c;把host文件加…

SpringBean-生命周期

Spirng Bean 元信息配置阶段 1 面向资源 xml配置&#xff08;很熟悉了不做讨论&#xff09;Properties配置 public class BeanMetaDemo {public static void main(String[] args) {DefaultListableBeanFactory factory new DefaultListableBeanFactory();PropertiesBeanDef…

【C语言】字符串及其函数速览

字符串及其函数速览 字符串及其函数1. 字符串的输入输出1.1 gets()1.2 fgets()1.3 puts()1.4 fputs()输入输出函数案例 2. 字符串相关函数速览2.1 字符串赋值strset()strnset()strcpy()strncpy()strdup()下面的mem系列函数不仅能作用于字符&#xff0c;也能作用于其他类型memse…

【Java面试】三、Redis篇(下)

文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路&#xff1a; 代码实现&#xff1a; 比如优惠券数量为1。正常情况下&#xff1a;用户A的请求过来&a…

DeepRec Extension 打造稳定高效的分布式训练

DeepRec Extension 即 DeepRec 扩展&#xff0c;在 DeepRec 训练推理框架之上&#xff0c;围绕大规模稀疏模型分布式训练&#xff0c;我们从训练任务的视角提出了自动弹性训练&#xff0c;分布式容错等功能&#xff0c;进一步提升稀疏模型训练的整体效率&#xff0c;助力 DeepR…

开源RAG,本地mac启动 dify源码服务

一、Dify文档 参考官方文档来操作&#xff0c;基本没太大的问题。一些细节&#xff0c;我在本篇文章中补充了出来。 这篇文章主要讲以源码的方式启动后端服务&#xff0c;前端服务使用容器启动。 dify 文档地址 欢迎使用 Dify | 中文 | Dify Dify 本地源码部署文档&#xff…

如何解读伊朗发布的直升机事故调查报告?一般事故调查报告应怎么写?

如何解读伊朗发布的直升机事故调查报告&#xff1f;一般事故调查报告应怎么写&#xff1f; 据央视新闻客户端消息&#xff1a;当地时间5月23日&#xff0c;伊朗武装部队总参谋部发布首份已故总统莱希及其随行人员乘坐的直升机事故调查报告。以下是#李秘书讲写作#对报告内容的解…

C语言面向对象编程,linux同时控制TOF摄像头和RGB摄像头

linux应用层同时控制TOF和RGB摄像头&#xff0c;为了方便操作&#xff0c;统一接口&#xff0c;这里将TOF和RGB摄像头看成两个对象&#xff0c;对它们分别实现&#xff0c;初始化&#xff0c;去初始化&#xff0c;读取视频流&#xff0c;停止视频流&#xff0c;启动视频流&…

YOLOv8 | 卷积模块 | 即插即用的可变核卷积AKConv【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测领域内,尽管YOLO系列的算法傲视群雄,但在某些方面仍然存在改进的空间。在YOLOv8提取特征的时候,卷积的核是固定的K*K大小,导致参数数量随着大小的增加呈平方级增长。显然,不同数据集和目标的形状…

基于微信的家庭理财管理小程序的设计与实现(论文+源码)_kaic

摘 要 随着中国经济的飞速发展&#xff0c;家庭收入不断增高&#xff0c;人们的消费除了简单的维持日常生活之外&#xff0c;还有其他的消费方式&#xff0c;比如旅游、电商购物等&#xff0c;层出不穷的消费方式带给人快乐的同时&#xff0c;也常常让一些人逐渐无法把握住自…

【LeetCode】每日一题 2024_5_24 找出最具竞争力的子序列(栈,模拟,贪心)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;找出最具竞争力的子序列题目描述代码与解题思路 每天进步一点点 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;找出最具竞争力的子序列 题目链接&a…

建材行业工程设计资质人员不足对资质有哪些影响

资质申请与审批&#xff1a;在申请工程设计资质时&#xff0c;人员的数量和专业配置是考核的重要指标之一。如果企业人员不足&#xff0c;尤其是缺乏关键岗位的专业技术人员&#xff0c;将直接影响资质的申请和审批。建设部门在核查企业主要人员信息时&#xff0c;如果发现人员…

24年前端面试 高频经典(答案版)

目录 1、函数式编程是什么简单说下&#xff1f; 2、打包工具代码管理 git svn 了解多少&#xff1f; 3、什么是Webpack&#xff1f;它的主要功能是什么&#xff1f; 4、Webpack的核心概念是什么&#xff1f; 5、如何获取到父节点dom 祖父节点呢&#xff1f; 6、登录流…