力扣图论篇
以下思路来自代码随想录以及官方题解。
文章目录
- 797.所有可能的路径
- 200.岛屿数量
- 130.被围绕的区域
- 1020.飞地的数量
797.所有可能的路径
给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]
输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]
class Solution {// 存储所有路径的结果List<List<Integer>> ans = new ArrayList<List<Integer>>();// 用于深度优先搜索的栈Deque<Integer> stack = new ArrayDeque<Integer>();public List<List<Integer>> allPathsSourceTarget(int[][] graph) {// 将起始节点0加入栈中stack.offerLast(0);// 从起始节点0开始进行深度优先搜索,目标节点为graph.length - 1dfs(graph, 0, graph.length - 1);// 返回所有路径的结果return ans;}public void dfs(int[][] graph, int x, int n) {// 如果当前节点x等于目标节点n,说明找到了一条路径if (x == n) {// 将当前栈中的路径添加到结果列表中ans.add(new ArrayList<Integer>(stack));// 返回上一层递归return;}// 遍历当前节点x的所有邻居节点yfor (int y : graph[x]) {// 将邻居节点y加入栈中stack.offerLast(y);// 从邻居节点y开始继续进行深度优先搜索dfs(graph, y, n);// 回溯:将邻居节点y从栈中移除stack.pollLast();}}
}
200.岛屿数量
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。
输入:grid = [["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]
]
输出:1输入:grid = [["1","1","0","0","0"],["1","1","0","0","0"],["0","0","1","0","0"],["0","0","0","1","1"]
]
输出:3
class Solution {// 深度优先搜索函数,用于遍历岛屿public void dfs(char[][] grid, int r, int c) {int nr = grid.length; // 获取行数int nc = grid[0].length; // 获取列数// 如果越界或者当前位置不是岛屿,直接返回if (r < 0 || c < 0 || r >= nr || c >= nc || grid[r][c] == '0') {return;}// 将当前位置标记为已访问grid[r][c] = '0';// 向上、下、左、右四个方向进行深度优先搜索dfs(grid, r - 1, c);dfs(grid, r + 1, c);dfs(grid, r, c - 1);dfs(grid, r, c + 1);}// 计算岛屿数量的函数public int numIslands(char[][] grid) {// 如果输入为空或者没有元素,直接返回0if (grid == null || grid.length == 0) {return 0;}int nr = grid.length; // 获取行数int nc = grid[0].length; // 获取列数int num_idlands = 0; // 初始化岛屿数量为0// 遍历整个网格for (int r = 0; r < nr; r++) {for (int c = 0; c < nc; c++) {// 如果当前位置是岛屿(值为'1')if (grid[r][c] == '1') {num_idlands++; // 岛屿数量加1dfs(grid, r, c); // 从当前位置开始进行深度优先搜索,将相邻的岛屿都标记为已访问}}}return num_idlands; // 返回岛屿数量}
}
130.被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 ‘O’ 用 'X' 填充。

输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。输入:board = [["X"]]
输出:[["X"]]
1020.飞地的数量
给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。
一次 移动 是指从一个陆地单元格走到另一个相邻**(上、下、左、右)**的陆地单元格或跨过 grid 的边界。
返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

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

输入:grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:所有 1 都在边界上或可以到达边界。
这道题是官方题解
class Solution {// 定义四个方向的偏移量public static int[][] dirs = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };private int m, n; // 行数和列数private boolean[][] visited; // 记录是否访问过public int numEnclaves(int[][] grid) {m = grid.length; // 获取行数n = grid[0].length; // 获取列数visited = new boolean[m][n]; // 初始化访问数组// 遍历第一列和最后一列for (int i = 0; i < m; i++) {dfs(grid, i, 0); // 深度优先搜索第一列dfs(grid, i, n - 1); // 深度优先搜索最后一列}// 遍历第一行和最后一行(不包括第一列和最后一列)for (int j = 1; j < n - 1; j++) {dfs(grid, 0, j); // 深度优先搜索第一行dfs(grid, m - 1, j); // 深度优先搜索最后一行}int count = 0; // 记录未被访问过的陆地数量// 遍历除第一行、最后一行、第一列、最后一列之外的区域for (int i = 1; i < m - 1; i++) {for (int j = 1; j < n - 1; j++) {if (grid[i][j] == 1 && !visited[i][j]) { // 如果当前位置是陆地且未被访问过count++; // 计数器加一}}}return count; // 返回未被访问过的陆地数量}// 深度优先搜索函数public void dfs(int[][] grid, int row, int col) {// 如果越界或者当前位置是水域或者已经访问过,直接返回if (row < 0 || row >= m || col < 0 || col >= n || grid[row][col] == 0 || visited[row][col]) {return;}visited[row][col] = true; // 标记当前位置已访问// 遍历四个方向进行深度优先搜索for (int[] dir : dirs) {dfs(grid, row + dir[0], col + dir[1]);}}
}相关文章:
力扣图论篇
以下思路来自代码随想录以及官方题解。 文章目录 797.所有可能的路径200.岛屿数量130.被围绕的区域1020.飞地的数量 797.所有可能的路径 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不…...
图腾柱PFC工作原理:一张图
视屏链接: PFC工作原理...
MongoDB开启事务
MongoDB开启事务 配置单节点。到路径C:\Program Files\MongoDB\Server\4.0\bin 使用记事本以管理员权限打开文件mongod.cfg添加如下配置: replication:replSetName: rs02. 重启MongoDB服务 3. 重启后执行命令 rs.initiate()...
风车IM即时通讯系统APP源码DJ2403版完整苹果安卓教程
关于风车IM,你在互联网上能随便下载到了基本都是残缺品, 经过我们不懈努力最终提供性价比最高,最完美的版本, 懂货的朋友可以直接下载该版本使用,经过严格测试,该版本基本完美无缺。 1.宝塔环境如下: Ngin…...
新增流计算计数窗口,TDengine 3.2.3.0 八大板块功能更新
自发布以来,TDengine 3.0 版本在研发人员和社区用户的共同努力下不断优化,产品的稳定性和易用性获得了大幅提升,在知轮科技的智慧轮胎系统、黑格智能 3D 打印业务、韵达快递业务、中国地震台网中心、中移物联智慧出行场景等众多企业项目中获得…...
【架构笔记3】做“用心”之人
凡事就怕“用心”二字,但是用心做事,其实如果没有前提和详情,这本就是一句正确的废话,在一些项目开发和落地过程中,我也有了一些新的体会,自认为不是多余。 我觉得心这个词至少包含四个含义:“…...
前端加密面面观:常见场景与方法解析
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
突破编程_前端_JS编程实例(目录导航)
1 开发目标 目录导航组件旨在提供一个滚动目录导航功能,使得用户可以方便地通过点击目录条目快速定位到对应的内容标题位置,同时也能够随着滚动条的移动动态显示当前位置在目录中的位置: 2 详细需求 2.1 标题提取与目录生成 组件需要能够自…...
扩展学习|系统理解数字经济
文献来源:[1]肖静华,胡杨颂,吴瑶.成长品:数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…...
前端学习之列表标签
目录 有序列表 结果 无序标签 结果 数据标签 结果 有序列表 (注:注释是解释) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </…...
华为OD面试分享14(2024年)
双非本,机试400分,部门流程与IT,base西安 分享面经攒人品 10.27 一面 深挖项目,面试官很友好,根据项目的每个技术点和场景来提问,比如项目中数据库数据量级有多大,什么时候会出现缓慢,如何解决的,有没有经过压力测试,经过优化后性能怎么样,项目中用到的Kafka和redis…...
安全测试报告-模板内容
1. 概述 为检验XXXX平台 系统的安全性,于 XXXX年 XX 月 XX 日至 XXXX年 XX 月 XX日对目标系统进行了安全测试。在此期间测试人员将使用各 种非破坏性质的攻击手段,对目标系统做深入的探测分析,进而挖掘系统中的安 全漏洞和风险隐患。研发团队…...
FreeRTOS学习笔记-基于stm32(3)中断管理
一、什么是中断 通俗点讲就是让CPU停止当前在做的事,转而去做更紧急的事。 二、中断优先级分组 这个紧急的事也有一个等级之分,优先级越高越先执行。stm32使用中断优先配置寄存器的高4位,共16级的中断优先等级。 stm32的中断优先等级可以分为…...
android pdf框架-6,文本生成pdf
前文介绍如何使用图片生成pdf,这里介绍如何使用文本生成pdf 使用mupdf生成 mupdf生成的pdf略大,字体可以自定义. 生成的代码不复杂,也有好几种,以story的方式生成为例 fun createPdfFromText(sourcePath: String, destPath: String): Boolean {val text EncodingDetect.rea…...
关于springboot一个接口请求后,主动取消后,后端是否还在跑
1、最近在思考一个问题,如果一个springboot的请求的接口比较耗时,中途中断该请求后,则后端服务是否会终止该线程的处理,于是写了一个demo RequestMapping(value "/test", method RequestMethod.GET)public BasicResul…...
理解自相关图AC和偏自相关图PAC Plots
when we talk about the time-series data, many factors affect the time series, but the only thing that affects the lagged version of the variable is the time series data itself. by Yugesh Verma 时序数据按照时间点的先后顺序进行排列,变化是在邻近的时间段之间发…...
.NetCore6.0实现ActionFilter过滤器记录接口请求日志
文章目录 目的实现案例:一.首先我们新建一个WebApi项目二.配置 appsettings.json 文件,配置日志存放路径三.创建 Model 文件夹,创建AppConfig类和ErrorLog类1.在AppConfig类中编写一个GetConfigInfo方法获取配置文件中的值2.在ErrorLog类中&a…...
代码详解:2024美团春招实习笔试第一场0309,是难还是简单?
前言: 1.第一题(模拟) 2.第二题(模拟) 3.第三题(二维前缀和) 4.第四题的思维(双指针) 5.第五题难度比较大(并查集删边离散化) 一.小美的MT MT 是美团的…...
平衡二叉树
前言 在关键字排列随机的情况下,二叉排序树的平均查找长度和 l o g n log n logn是等数量级的。在某些情况下,尚需在构成二叉排序树的过程中进行“平衡化”处理,使其成为平衡二叉树。 如果任何初始化序列构成的二叉排序树都是平衡二叉树&…...
脚本自动化 设置快捷方式并设置为管理员运行
自动化创建快捷方式并设置为始终以管理员权限运行,可以通过编写批处理脚本来实现。以下是一个创建.bat批处理文件快捷方式并设置为管理员运行的示例脚本: batch echo off set SCRIPT_PATH"C:\Scripts\myScript.bat" set SHORTCUT_PATH"%…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
