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开源…

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

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

SpringBean-生命周期

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

【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;伊朗武装部队总参谋部发布首份已故总统莱希及其随行人员乘坐的直升机事故调查报告。以下是#李秘书讲写作#对报告内容的解…

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

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

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

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

广义线性chirplet变换【附MATLAB代码】

文章来源&#xff1a;微信公众号&#xff1a;EW Frontier 摘要 时频分析方法是一种刻画信号时变特征的有效工具&#xff0c;在相当长的一段时间内受到了广泛的关注。随着TF算法的发展&#xff0c;许多先进的方法被提出&#xff0c;可以提供更精确的TF结果。但是&#xff0c;不…

【LabVIEW FPGA入门】使用事件发生函数同步FPGA循环

1.使用事件发生函数 使用 Occurrences 函数来控制单独的同步活动。特别是&#xff0c;当您希望程序框图的一部分等待程序框图的另一部分完成任务而不强制 LabVIEW 进行轮询时&#xff0c;请使用这些函数。 您可以使用全局变量执行类似于occurrences函数的功能&#xff0c;通过一…

详解CSS(二)

目录 1.背景属性 1.1背景颜色 1.2背景图片 1.3背景平铺 1.4背景位置 1.5背景尺寸 2.圆角矩形 3.元素的显示模式 3.1行内元素/内联元素&#xff08;Inline element&#xff09; 3.2块级元素&#xff08;Block-level element&#xff09; 3.3行内块元素&#xff08;In…

【leetcode面试经典150题】-80. 删除有序数组中的重复项 II

【leetcode面试经典150题】-80. 删除有序数组中的重复项 II 1 题目介绍2 个人解题思路2.1 代码2.2 思路 3 官方题解 1 题目介绍 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组…

d20(184-190)-勇敢开始Java,咖啡拯救人生

目录 网络通信 网络通信三要素&#xff08;IP地址&#xff0c;端口号&#xff0c;协议 IP地址 InetAddress 端口号 协议 传输层的两个通信协议 UDP通信 java.net.Datagramsocket类 客户端 服务端 UDP通信多收多发 客户端 服务端 TCP通信 java.net.Socket类 客…

【全网最全】2024电工杯数学建模A题21页初步参考论文+py代码+保奖思路等(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模A题21页初步参考论文py代码保奖思路等&#xff08;后续会更新成品论文&#xff09;「首先来看看目前已有的资料&#x…

企业应考虑的优秀云安全措施

作为云客户&#xff0c;企业有责任确保正确使用他们提供的工具来保证数据和应用程序的安全。让德迅云安全来跟大家一起研究一些典型企业应该考虑的优秀云安全措施。 在数据安全和隐私方面&#xff0c;企业是否在努力跟上疫情的发展?企业不是一个人。就像多年以前&#xff0c;C…

解决小皮面版搭建php网站数据库连接不了

首先进入mysql bin目录下 并执行cmd mysql -u root -pCREATE USER userlocalhost IDENTIFIED BY pass;GRANT ALL PRIVILEGES ON *.* TO userlocalhost;GRANT SELECT, INSERT, UPDATE ON database_name.* TO xxwlocalhost;FLUSH PRIVILEGES;select host ,user from mysql.user…

DOS学习-目录与文件应用操作经典案例-del

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 DOS系统的del命令是一个用于删除文件的命令行工具。以下…