大厂面试高频题目——图论

news/2024/10/10 8:18:50

797.所有可能的路径

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)
graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

思考

深搜dfs模板题。

class Solution:def __init__(self):self.path = []self.res = []def dfs(self,graph,x):if self.path[-1] == len(graph)-1:self.res.append(self.path[:])returnfor i in graph[x]:self.path.append(i)self.dfs(graph,i)self.path.pop() def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:self.path.append(0)self.dfs(graph,0)return self.res

200. 岛屿数量

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

思考

按行列开始遍历,记录访问过的陆地节点,如果遇到新的没有访问过的陆地节点,岛屿计数器+1,同时基于这个陆地节点进行搜索(深搜或广搜都可以),把临近的陆地节点都标记成已访问。

  1. 深搜版本
class Solution:def dfs(self,grid,visited,i,j):dir = [[-1,0],[1,0],[0,-1],[0,1]]m = len(grid)n = len(grid[0])for dx,dy in dir:next_x,next_y = i+dx,j+dyif next_x<0 or next_x > m-1 or next_y<0 or next_y > n-1:continue#print(m,n,next_x,next_y)if grid[next_x][next_y] == '0' or visited[next_x][next_y]:continuevisited[next_x][next_y] = Trueself.dfs(grid,visited,next_x,next_y)def numIslands(self, grid: List[List[str]]) -> int:m = len(grid)n = len(grid[0])visited = [[False] * n for _ in range(m)]res = 0for i in range(m):for j in range(n):if grid[i][j] =='1' and not visited[i][j]:res+=1visited[i][j] = Trueself.dfs(grid,visited,i,j)return res

2.bfs版本

class Solution:def bfs(self,grid,visited,i,j):dir = [[-1,0],[1,0],[0,-1],[0,1]]m = len(grid)n = len(grid[0])queue = deque()queue.append((i,j))while queue:i,j = queue.popleft()for dx,dy in dir:next_x,next_y = i+dx,j+dyif next_x<0 or next_x > m-1 or next_y<0 or next_y > n-1:continue#print(m,n,next_x,next_y)if grid[next_x][next_y] == '0' or visited[next_x][next_y]:continuevisited[next_x][next_y] = Truequeue.append((next_x,next_y))def numIslands(self, grid: List[List[str]]) -> int:m = len(grid)n = len(grid[0])visited = [[False] * n for _ in range(m)]res = 0for i in range(m):for j in range(n):if grid[i][j] =='1' and not visited[i][j]:res+=1visited[i][j] = Trueself.bfs(grid,visited,i,j)return res

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

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

相关文章

gophish钓鱼

目录环境介绍安装1、设置发件人的邮箱2、编辑钓鱼邮件模板3、制作钓鱼页面4、设置目标用户5、创建钓鱼事件6、查看结果 参考1 参考2 参考3 Gophish官网并下载适用于Linux的版本 环境介绍 Ubuntu22图形化/16G/4U/120G 172.16.186.137/24安装 rambo@test1:~$ mkdir gophish &…

NumPy 舍入小数、对数、求和和乘积运算详解

NumPy 提供五种舍入小数的方法:`trunc()`, `fix()`, `around()`, `floor()`, `ceil()`。此外,它还支持对数运算,如 `log2()`, `log10()`, `log()`,以及自定义底数的对数。NumPy 的 `sum()` 和 `prod()` 函数用于数组求和与乘积,可指定轴进行计算,`cumsum()` 和 `cumprod(…

微博-指定话题当日数据爬取

该文章详细描述了如何通过分析和抓包技术,绕过微博网页端和手机端的数据访问限制,使用Python脚本爬取与特定关键词(如"巴以冲突")相关的微博数据。文章首先探讨了网页端微博数据爬取的局限性,如需要登录账号和数据量限制,然后转向手机端,发现其对爬虫更为友好…

ZYNQ LINUX如何开机自动执行指定脚本

本意是想要开机后自动加载某内核驱动,并且执行指定应用程序。在 /etc/init.d/rc 末尾增加指定脚本执行即可。脚本内容 insmod /usr/u-dma-buf.ko

FastAPI-8:Web层

8 Web层 本章将进一步介绍FastAPI应用程序的顶层(也可称为接口层或路由器层)及其与服务层和数据层的集成。 一般来说,我们如何处理信息?与大多数网站一样,我们的网站将提供以下方法:检索 创建 修改 替换 删除8.1 插曲: 自顶向下、自底向上、中间向外?(Top-Down, Bottom…

模拟epoll的饥饿场景

说明 一直听说epoll的饥饿场景,但是从未在实际环境中面对过,那么能不能模拟出来呢?实际的情况是怎样呢? 模拟步骤基于epoll写一个简单的tcp echo server,将每次read返回的字节数打印出来 模拟一个客户端大量写入 测试其他客户端能否正常返回Server代码 #include <stdio…

浪潮服务器做 RAID 的方式

一次充实的装系统体验,非常感谢耐心的浪潮售后技术,没有他就没有这篇博文 由于按Ctrl + H 和 Ctrl + R 进不去 RAID,网上也没有合适的教程 于是使用工程师最有效的手段打电话 摇 人 首先把产品的序列号准备好浪潮服务器客服:400-860-0011关注微信公众号:浪潮信息专家服务 …

服务端和客户端 RESTful 接口上传 Excel 的 Python 代码

哈喽,大家好,我是木头左,物联网搬砖工一名,致力于为大家淘出更多好用的AI工具!背景 在现代软件开发中,RESTful API(Representational State Transfer Application Programming Interface)已经成为一种常用的架构风格。它提供了一种简单、易于理解和实现的方式来构建分布式…